我正在尝试搜索一个数组数组,如果找到了针,我想返回或至少知道匹配的键。
例如:
['foo'] =>
['bar'] => 'blah'
搜索' blah '我需要知道有一个匹配,键是' foo '和' bar '
我设法实现了一个搜索,它返回匹配的布尔值:
function search_array($needle, $haystack) {
if(in_array($needle, $haystack)) {
return true;
}
foreach($haystack as $element) {
var_dump($element);
if(is_array($element) && $this->search_array($needle, $element))
return true;
}
return false;
}
但我正在努力学习如何知道钥匙。这甚至可能吗?
答案 0 :(得分:2)
是的,这是可能的。一种解决方案是:
在递归的情况下,当迭代大海捞针中的每个元素时(在递归之前),使用foreach的$key => $value
语法。然后,当递归调用产生一个值时,检查返回的值是否是一个数组(使用is_array()) - 如果是,则使用array_unshift()将当前键推送到返回的数组。否则返回一个包含密钥和返回值的数组。
function search_array($needle, $haystack) {
if(in_array($needle, $haystack)) {
return array_search($needle, $haystack);
}
foreach($haystack as $key => $element) {
if(is_array($element) && search_array($needle, $element)) {
$searchReturn = search_array($needle, $element);
if (is_array($searchReturn)) {
array_unshift($searchReturn, $key);
return $searchReturn;
}
return [$key, $searchReturn];
}
}
return false;
}
在this playground example中看到它。
答案 1 :(得分:1)
你可以这样做,因为它是二维数组。
function search_array($needle, $haystack) {
foreach($haystack as $key => $value) {
if ($value == $needle) {
return array($key);
} else if (is_array($value)) {
foreach ($value as $k => $v) {
if ($v == $needle) {
return array($key, $k);
}
}
}
}
}
对于n维数组,您应该使用递归函数...