我正在寻找一种优雅的方法来获取满足给定条件的数组的第一个(也是第一个)元素。
简单的例子:
输入:
[
['value' => 100, 'tag' => 'a'],
['value' => 200, 'tag' => 'b'],
['value' => 300, 'tag' => 'a'],
]
Run Code Online (Sandbox Code Playgroud)
条件: $element['value'] > 199
预期产量:
['value' => 200, 'tag' => 'b']
Run Code Online (Sandbox Code Playgroud)
我自己想出了几种解决方案:
遍历数组,检查条件并在找到时中断
使用array_filter施加条件并获取已过滤的第一个值:
array_values(
array_filter(
$input,
function($e){
return $e['value'] >= 200;
}
)
)[0];
Run Code Online (Sandbox Code Playgroud)两者似乎都比较麻烦。有人有更清洁的解决方案吗?我是否缺少内置的php函数?
u_m*_*der 10
有没有必要使用上述所有功能,如array_filter。因为array_filter 过滤器数组。而过滤是不一样的发现第一个值。所以,只需这样做:
foreach ($array as $key => $value) {
if (meetsCondition($value)) {
$result = $value;
break;
// or: return $value; if in function
}
}
Run Code Online (Sandbox Code Playgroud)
array_filter将过滤整个数组。因此,如果您需要的值是第一个,并且数组有 100 个或更多元素,array_filter仍将检查所有这些元素。那么,你真的需要 100 次迭代而不是 1 次吗?答案很明确——不。
我能找到的最短的是使用current:
current(array_filter($input, function($e) {...}));
Run Code Online (Sandbox Code Playgroud)
current本质上是获取第一个元素,false如果为空则返回。
如果经常重复执行代码,则最好将其提取为自己的函数。