【发布时间】:2014-11-19 09:27:36
【问题描述】:
我需要在多维数组中找到一个值的键
【问题讨论】:
-
您不能遍历所有元素并检查每个元素是否与给定值相等吗?
-
这是多维的,我什至不知道维数
-
很棒的@SujitAgarwal 谢谢。
-
提问前先搜索 :)
标签: php multidimensional-array
我需要在多维数组中找到一个值的键
【问题讨论】:
标签: php multidimensional-array
首先,您可以使用 in_array/is_array 函数在数组中搜索值,但 in_array 不适用于多维数组,因此最好使用 foreach 循环特别是在其多维数组时搜索某些内容。这是 php 手册中的一个函数,适用于多维数组,它以递归方式工作,因此输入数组的深度无关紧要。
function myInArray($array, $value, $key){
//loop through the array
foreach ($array as $val) {
//if $val is an array cal myInArray again with $val as array input
if(is_array($val)){
if(myInArray($val,$value,$key))
return true;
}
//else check if the given key has $value as value
else{
if($array[$key]==$value)
return true;
}
}
return false;
}
【讨论】:
您不必知道或关心有多少维度。 Adam Sinclair 答案的“搜索键”部分中的多维示例将爬取数组的整个地理,发现它的形状并忘记它完成的部分并没有产生你想要的。
【讨论】:
搜索键
所以如果你知道值,我猜你正在寻找 $key。然后使用array_search:
$array = array(0 => 'value1', 1 => 'value2', 2 => 'value3', 3 => 'red');
$key = array_search('value2', $array); // 2
如果是多维数组,使用这个函数:
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
在数组中?
如果您想知道某个值是否在数组中,请使用函数in_array。使用上面的数组:
if (in_array("value1", $array)) {
echo "value1 is in the array";
}
如果是多维数组,则使用:
function in_multiarray($elem, $array)
{
$top = sizeof($array) - 1;
$bottom = 0;
while($bottom <= $top)
{
if($array[$bottom] == $elem)
return true;
else
if(is_array($array[$bottom]))
if(in_multiarray($elem, ($array[$bottom])))
return true;
$bottom++;
}
return false;
}
【讨论】: