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