如何从多维数组中搜索数组键,并使用父数组键返回找到的键值(如果存在)。例如,我自定义了数组:
$array = [
'type' => 'vacancy',
'needs' => ['root' => 'active'],
'market' => 'shopping',
'red' => 'color',
'education' => 'learning',
'fruits' => [
'red' => 'apple',
'cool' => 'cherry'
]
];
例如,我需要当前数组中的搜索键red
。如您所见,此数组中存在2个项,其键为red
。如果数组具有相似的键,则函数返回示例数组作为响应:
[
0 => ['red' => 'color'],
1 => ['red' => 'apple']
]
如果搜索键(例如type
)在数组内仅一次,则响应将如下所示:
['type' => 'vacancy']
我很累:
function searchKey($key, $array) {
foreach ($array as $k => $v) {
if($key === $k) {
return [$k => $v];
} elseif(is_array($v)) {
return searchKey($key, $v);
} elseif(is_array($k)) {
return searchKey($key, $k);
}
}
return false;
}
当我从数组结果中搜索键root
时是正确的,但是当我搜索键red
时返回false
。
答案 0 :(得分:2)
您可以尝试以下方法:
function findByKey($findKey, $array, $result = []) {
foreach ($array as $key => $value) {
if ($key === $findKey) {
$result[] = [$key => $value];
}
if (is_array($value)) {
$result = findByKey($findKey, $value, $result);
}
}
return $result;
}
想法是使用递归函数:
key => value
,您检查密钥是否是您想要的:如果是,则将其添加到结果数组中,否则继续现在使用它:
$array = [
'type' => 'vacancy',
'needs' => ['root' => 'active'],
'market' => 'shopping',
'red' => 'color',
'education' => 'learning',
'fruits' => [
'red' => 'apple',
'cool' => 'cherry'
]
];
使用键type
:
$result = findByKey('type', $array);
var_dump($result);
输出为:
array(1) {
[0]=>
array(1) {
["type"]=>
string(7) "vacancy"
}
}
使用键red
:
$result = findByKey('red', $array);
var_dump($result);
输出为:
array(2) {
[0]=>
array(1) {
["red"]=>
string(5) "color"
}
[1]=>
array(1) {
["red"]=>
string(5) "apple"
}
}
这里是测试链接:link