2012-04-16 132 views
0

我想写一段代码,它搜索一列二维数组值,并返回键时,它发现它。现在我有两个函数,一个找到一个值并返回布尔值true或false,另一个(不工作)返回密钥。我想在保留查找函数的递归性质但返回一个键的意义上将两者合并。我无法想象如何在一个功能中做到这一点,但是工作中的关键取景器将会非常感谢。PHP搜索多维数组 - 不关联

感谢

function in_array_r($needle, $haystack, $strict = true) { 
foreach ($haystack as $item) { 
    if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
     return true; 
    } 
} 

return false; 

}

function loopAndFind($array, $index, $search){ 
    $returnArray = array(); 
    foreach($array as $k=>$v){ 
      if($v[$index] == $search){ 
       $returnArray[] = $k; 
      } 
    } 
    return $returnArray; 

}`

对不起,我的意思是添加一个例子。例如:

Array [0]{ 
[0]=hello 
[1]=6 
} 
[1] 
{ 
[0]=world 
[1]=4 
} 

我想用[x] [0]索引搜索数组以检查搜索项的每个字符串。如果找到了,它应该返回主数组中的索引/键,如“world”返回1

+0

你可以发布一个例子阵列突出你想什么,在它匹配吗? “一列二维数组值并返回键”不是很清楚。 – Ing 2012-04-16 18:46:16

+0

你为什么在第二个函数中使用索引? – WordsWorth 2012-04-16 18:52:33

+0

我上面发布了一个例子,我不确定我为什么使用索引。我认为它应该是第二个数组的索引,如Array [0] {[index] = stuff,[1] = words}等 – 2012-04-16 19:46:13

回答

2

这工作:

$array = array(array('hello', 6), array('world', 4)); 
$searchTerm = 'world'; 

foreach ($array as $childKey => $childArray) { 
    if ($childArray['0'] == $searchTerm) { 
     echo $childKey; //Your Result 
    } 
} 
+0

谢谢,效果很好! – 2012-04-16 20:01:52

1

您已经拥有了第一个功能所需的所有功能。 PHP没有休息:

$findings = array_map('in_array_r', $haystack); 
$findings = array_filter($findings); # remove all not found 
var_dump(array_keys($findings)); # the keys you look for 
+0

对不起,我不确定我知道你在做什么。我需要一次搜索数组中的一个项,而不是一次运行该函数。这是否有意义,或者我误解了你的代码?谢谢 – 2012-04-16 19:44:29

+0

从你的问题中不清楚你想要搜索什么以及如何。你已经放弃了一些没有显示任何代码的函数,你想如何调用它们,输入是什么以及输出应该是什么。如果你补充一点,我很确定我可以把答案同样清楚。 – hakre 2012-04-16 19:48:31

+0

感谢您的帮助,但其他答案正常工作。 – 2012-04-16 19:58:34