我可以使用array_filter检查多维数组中的特定条件来替换if()语句吗?
希望它取代这样的东西:
if($item[0] == $key && $item[1] == "Test"){
//do something here....
}else{
//some other code here...
}
当前数组:
Array
(
[Zone] => Array
(
[Type] => s45
[packageA1] => Array
(
[level] => REMOVE FROM DB
[stage] => REMOVE FROM DB
[description] => description goes here
[image] => NULL
)
)
)
我想首先搜索[Type]是否存在。如果它不存在那么我认为使用array_splice将其插入现有数组。如果它存在,则检查[packageA1]是否存在,如果[packageA1]不存在,那么我将再次使用array_splice。如果[packageA1]存在,那么插入时会跳过任何类型..
这有意义吗?
答案 0 :(得分:0)
array_filter
用于过滤数组,而不是根据数组的内容替换布尔逻辑。
array_filter
需要2个参数 - input
和callback
。
callback
函数应该采用单个参数(数组中的项)并返回true
或false
。该函数返回一个数组,其中包含已删除false
的所有项。
(如果未指定callback
函数,则将从结果数组中删除所有等于false
的项目。)
修改强>
根据您更新的文字,以下代码应该按您的要求执行:
if (!$item['Zone']['Type']) {
$item['Zone']['Type'] = $something;
}
if (!$item['Zone']['packageA1']) {
!$item['Zone']['packageA1'] = $something;
}
显然,您需要将$something
替换为您实际想要添加的内容。
使用三元运算符可以缩短此代码。
如果您运行的是PHP 5.3或更高版本,则可以执行以下操作:
$item['Zone']['Type'] = $item['Zone']['Type'] ?: $something;
$item['Zone']['packageA1'] = $item['Zone']['packageA1'] ?: $something;
在5.3之前,您不能错过三元操作的中间位置,必须使用完整格式,如下所示:
$value = conditon ? if_true : if_false;
(在我的例子中使用?:
时,'condition'和'if_true'取相同的值。)
完整的三元运算符(对于5.3之前的PHP)看起来像:
$item['Zone']['packageA1'] = $item['Zone']['packageA1'] ? $item['Zone']['packageA1'] : $something;