array_filter检查条件?

时间:2012-11-08 15:47:34

标签: php multidimensional-array array-filter

我可以使用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]存在,那么插入时会跳过任何类型..

这有意义吗?

1 个答案:

答案 0 :(得分:0)

array_filter用于过滤数组,而不是根据数组的内容替换布尔逻辑。

array_filter需要2个参数 - inputcallback

callback函数应该采用单个参数(数组中的项)并返回truefalse。该函数返回一个数组,其中包含已删除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;