2011-08-11 33 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

數組的初始化可能是正確的嗎? (我試着用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(); 
} 

//編輯

如果你想這樣做的初始化,您可以讓您的代碼,但接下來要檢查is_null($arr['date_added']),而不是isset(...)

+0

是的,這就是我目前的做法。但是我想通過在初始化時添加所有元素來簡化代碼並使其更具可讀性。不知道是否有可能..雖然.. – sydo

0

,如果你不想更新的價值數據庫中的一個字段,不要傳遞該字段。

$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