按条件排列的数组的第一个元素

2022-08-31 00:15:49

我正在寻找一种优雅的方法来获取满足给定条件的数组的第一个(也是唯一的第一个)元素。

简单示例:

输入:

[
    ['value' => 100, 'tag' => 'a'],
    ['value' => 200, 'tag' => 'b'],
    ['value' => 300, 'tag' => 'a'], 
 ]

条件:$element['value'] > 199

预期输出:

['value' => 200, 'tag' => 'b']

我自己想出了几种解决方案:

  1. 循环访问数组,检查条件并在找到时中断

  2. 使用array_filter应用条件并取筛选的第一个值:

    array_values(
        array_filter(
            $input, 
            function($e){
                return $e['value'] >= 200;
            }
        )
    )[0];
    

两者似乎都有点麻烦。有没有人有更清洁的解决方案?我缺少内置的php函数吗?


答案 1

我能找到的最短的方法是使用:current

current(array_filter($input, function($e) {...}));

current 实质上获取第一个元素,如果其为空,则返回。false

如果代码经常重复,则最好将其提取到自己的函数中。


答案 2

无需使用上述所有功能,例如 .因为过滤器阵列。过滤查找第一个值不同。因此,只需执行以下操作:array_filterarray_filter

foreach ($array as $key => $value) {
    if (meetsCondition($value)) {
        $result = $value;
        break;
        // or: return $value; if in function
    }
}

array_filter将过滤整个数组。因此,如果您所需的值是第一个,并且数组有100个或更多元素,则仍将检查所有这些元素。那么,你真的需要100次迭代而不是1次迭代吗?Asnwer很清楚 - array_filter


推荐