-1

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

那有意义吗?

4

1 回答 1

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;
于 2012-11-08T16:05:15.753 回答