使用平面数组获取多维数组值

时间:2018-07-12 22:07:11

标签: php arrays

我有以下数组:

$people['men'] = [
    'first_name' => 'John',
    'last_name' => 'Doe'
];

我有以下平面数组:

$name = ['men', 'first_name'];

现在,我想基于平面数组的元素顺序创建一个“读取”平面数组并从多维数组获取值的函数。

function read($multidimensionalArray,$flatArray){
    // do stuff here
}

echo read($people,$name); // must print 'John'

这甚至有可能实现吗?以及采用哪种方式?我真的为此而伤脑筋。我根本不知道如何开始。

谢谢。

4 个答案:

答案 0 :(得分:3)

这应该是技巧:

<?php

$people['men'] = [
    'first_name' => 'John',
    'last_name' => 'Doe'
];
$name = ['men', 'first_name'];

echo read($people,$name);

function read($multidimensionalArray,$flatArray){
    $cur = $multidimensionalArray;
    foreach($flatArray as $key)
    {
        $cur = $cur[$key];
    }
    return $cur;
}

链接:https://3v4l.org/96EnQ

请确保在其中进行一些错误检查(isset等)

答案 1 :(得分:1)

您可以使用递归函数来做到这一点。

function read(&$array, $path) {

    // return null if one of the keys in the path is not present
    if (!isset($array[$key = array_shift($path)])) return null;

    // call recursively until you reach the end of the path, then return the value
    return $path ? read($array[$key], $path) : $array[$key];
}

echo read($people, $name);

答案 2 :(得分:0)

您也可以使用array_reduce

$val = array_reduce($name, function($carry, $item) {
    return $carry[$item];
}, $people);

答案 3 :(得分:-1)

看起来像您只想要的

echo $multidimensionalArray[$flatArray[0]][$flatArray[1]];