PHP多维数组键搜索

时间:2015-10-22 14:55:58

标签: php arrays search key

所以,我有多维数组(例如):

array[1][22]['name']
array[1][33]['name']
array[2][44]['name']
array[3][55]['name']

我知道最后一个数组键(它的ID)(例如 - [44]),如何找到已知键的[name]值?

在我的猜测中我需要像array_search这样的东西,但对于键和多维数组......

4 个答案:

答案 0 :(得分:2)

这是PHP> = 5.5.0的简单方法。假设数组中只有一个键44

echo array_column($array, 44)[0]['name'];
// or
echo current(array_column($array, 44))['name'];

早期版本:

foreach($array as $k => $v) { if(isset($v[44])) echo $v[44]['name']; }

答案 1 :(得分:1)

最好更改阵列结构:

$array = [
  22 => [ 'name' => 'A'],
  33 => [ 'name' => 'B'],
  44 => [ 'name' => 'C'],
  55 => [ 'name' => 'D'],
];

然后简单地写

$array[44]['name']

答案 2 :(得分:0)

为此搜索优化数组不是更好吗,例如构建另一个以ID作为键并将数据引用为值的数组?

When building your array you could:
$IDsIndex = array();
foreach(...) {
    $IDsIndex[$ID] = &$data;
}

然后:

$IDsIndex[44]['name'];

答案 3 :(得分:0)

我有一个似乎对我有用的功能。如果你发现它缺乏,请告诉我。注意:尚未针对大型阵列或对象进行性能测试。

function arrayKeySearch(array $haystack, string $search_key, &$output_value, int $occurence = 1){
    $result             = false;
    $search_occurences  = 0;
    $output_value       = null;
    if($occurence < 1){ $occurence = 1; }
    foreach($haystack as $key => $value){
        if($key == $search_key){
            $search_occurences++;
            if($search_occurences == $occurence){
                $result         = true;
                $output_value = $value;
                break;
            }
        }else if(is_array($value) || is_object($value)){
            if(is_object($value)){
                $value = (array)$value;
            }
            $result = arrayKeySearch($value, $search_key, $output_value, $occurence);
            if($result){
                break;
            }
        }
    }
    return $result;
}