PHP:获取多维数组中的键?

时间:2009-12-19 19:24:58

标签: php

我有一个类似

的数组
$myArray =array
(
"0"=>array("dogs",98),
"1"=>array("cats",56),
"2"=>array("buffaloes",78)
)

如何通过提供值来获取密钥?

e.g。如果我搜索“buffaloes”,array_search可能会返回“2”。

由于

5 个答案:

答案 0 :(得分:2)

function asearch($key, $myArray) {
  for ($i = 0; $i < sizeof($myArray); $i++) {
    if ($myArray[$i][0] == $key) {
      return $i;
    }
  }
  return -1; # no match
}

尽管如此,您可能希望将阵列重组为:

$myarray = array(
  'dogs' => 98,
  'cats' => 56,
  'buffaloes' => 78
);

只是这样做:

$myArray['buffaloes']; # 78

答案 1 :(得分:2)

你能做到的唯一方法就是迭代每一个项目并预先形成Linear Search

$i = -1;
foreach ($myArray as $key => $item){
    if ( $item[0] == 'buffaloes' ){
        $i = $key;
        break;
    }
}
//$i now holds the key, or -1 if it doesn't exist

正如你所看到的,它实际上是非常低效的,好像你的阵列有20,000个项目而'buffaloes'是最后一项,你必须进行20,000次比较。

换句话说,您需要重新设计数据结构,以便可以使用密钥查找内容,例如,更好的方法是重新排列数组,以便将要搜索的字符串作为键,例如:

$myArray['buffaloes'] = 76;

速度要快得多,因为它使用了更好的数据结构,因此它只需要进行最多n log n次比较(其中n是数组中的项数)。这是因为数组实际上是一个有序映射。

另一个选项,如果您知道要搜索的值的确切值,请使用array_search

答案 2 :(得分:2)

$myArray =array
(
"0"=>array("dogs",98),
"1"=>array("cats",56),
"2"=>array("buffaloes",78)
);

function findInArray($term, $array) {
    foreach($array as $key => $val) {
        if(in_array($term, $val, true)) {
            return $key;
        }
    }
}

echo findInArray('buffaloes', $myArray); // 2
echo findInArray(78, $myArray); // 2

答案 3 :(得分:1)

你可以循环遍历数组的每个元素,测试每个条目的第一个元素是否等于“buffaloes”。

例如:

foreach ($myArray as $key => $value) {
    if ($value[0] == "buffaloes") {
        echo "The key is : $key";
    }
}

会得到你:

The key is : 2


另一个想法(更有趣?),如果你想要整个条目,可能是使用array_filter和一个回调函数,为“bufalloes”条目返回true:

function my_func($val) {
    return $val[0] == "buffaloes";
}
$element = array_filter($myArray, 'my_func');
var_dump($element);

会得到你:

array
  2 => 
    array
      0 => string 'buffaloes' (length=9)
      1 => int 78

var_dump(key($element));

向你发送你想要的2

答案 4 :(得分:1)

我从未听说过内置功能。如果你想要更通用的东西,那么你应该编写自己的函数并使用递归。也许array_walk_recursive会有所帮助