我想搜索二维数组,但我只想搜索第二维中的特定字段。如果找到,我想退回密钥。不需要从那里继续,我只需要第一次出现,但我不介意也能完全出现。
数组可能如下所示:
$array = [
0 => ['value' => 'x', 'foo' => 'bar'],
1 => ['value' => 'y', 'foo' => 'bar'],
2 => ['value' => 'z', 'foo' => 'x'],
];
现在我的第一个想法是这样的:
function myCustomArraySearch($array, $searchkey, $searchvalue) {
foreach ($array as $key => $value) {
if ($value[$searchkey] == $searchvalue) {
return $key;
}
}
return false;
}
echo myCustomArraySearch($array, 'value', 'x');
我敢肯定,有一个更加优雅的解决方案。有什么想法吗?
答案 0 :(得分:4)
这是一种返回单个键的方法:
$result = array_search('x', array_column($array, 'value'));
这将返回多个键:
$result = array_keys(array_column($array, 'value'), 'x');
如果array_column()
不需要PHP> = 5.5.0,请在其中使用:
array_map(function($v) { return $v['value']; }, $array)
答案 1 :(得分:2)
以下函数返回第一次出现的位置:
1 - 使用foreach
次迭代和array_serach
function search1($array, $key, $value) {
foreach ($array as $k => $arr) {
if (array_search($value, $arr) != false) {
return $k;
}
}
return false;
}
2 - 使用array_map
,array_key_exists
和array_search
。
function search2($array, $key, $value) {
$mapped = array_map(function($arr) use ($key, $value) {
return (array_key_exists($key, $arr) && $arr[$key] == $value)
? true
: false;
},
$array);
return array_search(true, $mapped);
}
答案 2 :(得分:2)
您的代码工作正常,因此此代码只需更少的代码。仅适用于PHP 5.5 +。
function myCustomArraySearch($array, $searchkey, $searchvalue) {
$cols = array_column($array, $searchkey);
$result = array_search($searchvalue, $cols);
return $result;
}
当然,如果你想返回它找到的数组,而不仅仅是索引,你就会这样返回:
function myCustomArraySearch($array, $searchkey, $searchvalue) {
$cols = array_column($array, $searchkey);
$result = array_search($searchvalue, $cols);
return $array[$result];
}