I would like to initialize an array:
$arr = array(
"date_edited" => time(),
"date_added" => ($action == "add" ? time() : NULL)
...
);
I use this array to update a database table.
Note the 2nd key, date_added. What I would like "date_added" not to be included in the array if $action is not "a开发者_JAVA百科dd". So in this case ($action != "add"), isset($arr['date_added']) should be false.
Is it possible right at the array's initialization? (I tried with NULL, but didn't work)
You can keep using your method and just filter it on declaration:
Example:
$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);
Will output:
array(2) { ["date_edited"]=> int(1313072949) ["date_removed"]=> int(1313072949) }
if you don't want to update the value of a field in a db, don't pass that field.
$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
$arr = array(
"date_edited" => time(), //...
);
if($action == "add") {
arr["date_added"] = time();
}
//EDIT
If you want to do it on initialization, you can keep your code but then have to check for is_null($arr['date_added'])
instead of isset(...)
.
精彩评论