如何使用另一个一维数组获取多维数组数据


how to get multi-dimensional array data with another one-dimension array

我想做的是有一个接受两个参数的函数,两个数组,第一个是不同长度的一维数组,第二个是不同深度和长度的多维数组。第一个数组从不关联,第二个数组始终是完全关联的数组。

此函数将从多维数组返回请求的值,如第一个数组所示。

假设第一个数组将始终是手写的并传递给此函数。这意味着开发人员始终知道要从多维数组返回一个值,并且永远不会将请求传递给不存在值的函数。

我认为下面的代码是我想要实现的最佳示例。

//Example multi-dimensional array
$multi = array(
        'fruit' => array(
                        'red' => array(
                                    'strawberries' => '$2.99/lb',
                                    'apples' => '$1.99/lb'
                                    ),
                        'green' => array(
                                    'honeydew' => '$3.39/lb',
                                    'limes' => '$0.75/lb'
                                    )
                    ),
        'vegetables' => array(
                        'yellow' => array(
                                    'squash' => '$1.29/lb',
                                    'bellpepper' => '$0.99/lb'
                                    ),
                        'purple' => array(
                                    'eggplant' => '$2.39/lb'
                                    )
                    ),
        'weeklypromo' => '15% off',
        'subscribers' => array(
                            'user1@email.com' => 'User 1',
                            'user2@email.com' => 'User 2',
                            'user3@email.com' => 'User 3',
                            'user4@email.com' => 'User 4'
                            )
        );
//Example one-dimensional array
$single = array('fruit', 'red', 'apples');
function magicfunc($single, $multi) {
    //some magic here that looks something like below
    $magic_value = $multi[$single[0]][$single[1]][$single[2]];
    return $magic_value;
}
//Examples:
print magicfunc(array('fruit', 'red', 'apples'), $multi);
Output:
$1.99/lb
print magicfunc(array('subscribers', 'user3@email.com'), $multi);
Output:
User 3
print magicfunc(array('weeklypromo'), $multi);
Output:
15% off

这将根据请求返回值:

function magicfunc($single, $multi) {
    while (true) {
        if (!$single) {
            break;
        }
        $searchIndex = array_shift($single);
        foreach ($multi as $k => $val) {
            if ($k == $searchIndex) {
                $multi = $val;
                continue 2;
            }
        }
    }
    return $multi;
}