2011-08-11 6 views
0

에 따라 일부 요소를 제외하는 방법은 배열을 초기화하고 싶습니다 :PHP - 배열을 초기화하고 조건

$arr = array(
    "date_edited" => time(), 
    "date_added" => ($action == "add" ? time() : NULL) 
    ... 
); 

나는 데이터베이스 테이블을 업데이트하려면이 배열을 사용합니다.

두 번째 키인 date_added에 유의하십시오. $ action이 "add"가 아닌 경우 "date_added"를 배열에 포함하지 않기를 바랍니다. 따라서이 경우 ($ action! = "add"), isset ($ arr [ 'date_added'])는 false이어야합니다.

배열의 초기화가 가능합니까? (I는 NULL로 시도했지만 작동하지 않았다)

답변

4

당신은 당신의 방법을 계속 사용 할 수 있습니다 단지 filter it 선언에 :

예 :

$action = "remove"; 
$arr = array_filter(array(
    "date_edited"  => time(), 
    "date_added"  => ($action == "add"  ? time() : NULL), 
    "date_removed" => ($action == "remove" ? time() : NULL), 
    "date_approved" => ($action == "approve" ? time() : NULL) 
)); 

var_dump($arr); 

출력 :

array(2) { ["date_edited"]=> int(1313072949) ["date_removed"]=> int(1313072949) } 
+0

영리한 해결책. +1 –

+0

'NULL'대신 'FALSE'를 사용하는 것이 좋을 수 있습니다. 왜냐하면 콜백이하지 않을 것이라고하기 때문입니다. 문서에서 :''콜백이 제공되지 않으면, FALSE와 같은 모든 입력 항목이 제거 될 것입니다. "' – afuzzyllama

+0

그것은 그것이 말하지만'empty()'처럼 행동합니다. 빈 배열, 0, '0', FALSE, NULL, ''모두 FALSE를 반환합니다. – AlienWebguy

0
$arr = array(
    "date_edited" => time(), //... 
); 

if($action == "add") { 
arr["date_added"] = time(); 
} 

// EDIT

당신이, 당신이 당신의 코드를 유지할 수 초기화에 그것을 그러나 is_null($arr['date_added'])를 확인하는 대신 isset(...)해야 할 경우 .

+0

예, 현재 그렇게하고 있습니다. 하지만 코드를 단순화하고 초기화시 모든 요소를 ​​추가하여 읽기 쉽도록하고 싶습니다. 비록 그것이 가능하다면 .. – sydo

0

당신의 값을 업데이트하지 않으려면 db의 필드는 해당 필드를 전달하지 마십시오.

$arr = array(
    "date_edited" => time(), 
    "date_added" => time(), 
    ... 
); 

$tmp = $arr; // copy $arr into $tmp in case you don't want to mess with the original 

if($action == "add") 
{ 
    unset($tmp['date_added']); 
} 

// do your sql operation using $tmp