我想在条件中有两个值的多维数组中搜索键。
我知道如何用单个搜索条件搜索多维数组:
$key = array_search($journee, array_column($data,'journee'));
但仅此而已。这是我的阵列设置:
Array
(
[0] => Array
(
[pseudo] => titi
[journee] => 11
[pts] => 3
)
...
[10] => Array
(
[pseudo] => test
[journee] => 10
[pts] => 6
)
[11] => Array
(
[pseudo] => test
[journee] => 11
[pts] => 4
)
)
如果我只将
11
放入array_search
中,对于array_column
键journee
,它将返回0。
我也想在搜索条件中添加
pseudo
(应该搜索键journee
和pseudo
来搜索特定值)。
我该如何实现这个目标?
仅用一个简单的功能是不可能的。
这是一个使用 two 的解决方案:
$search = ['pseudo' => 'test', 'journee' => 10];
$keys = array_keys(
array_filter(
$array,
function ($v) use ($search) { return $v['pseudo'] == $search['pseudo'] && $v['journee'] == $search['journee']; }
)
);
$key = $keys[0];
但是,如果您只需要找到一个键,我建议使用
foreach
和break
,因为您不必迭代所有值数组(使用array_filter
会发生什么)并立即停止当找到某些数据时:
$key = false;
$search = ['pseudo' => 'test', 'journee' => 10];
foreach ($array as $k => $v) {
if ($v['pseudo'] == $search['pseudo'] && $v['journee'] == $search['journee']) {
$key = $k;
// key found - break the loop
break;
}
}
要享受有条件停止循环的效率,同时将变量限制在全局范围之外,请使用立即调用函数表达式。可以使用
array_diff_assoc()
来识别合格行,以检查搜索数组中的所有关联元素是否在给定行中匹配。 演示
$search = ['pseudo' => 'test', 'journee' => 10];
var_export(
(function($haystack, $needle) {
foreach ($haystack as $i => $row) {
if (!array_diff_assoc($needle, $row)) {
return $i;
}
}
return null;
})($array, $search)
);
// output: 10