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

时间:2013-10-17 01:55:38

标签: php arrays multidimensional-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

1 个答案:

答案 0 :(得分:1)

这将返回所请求的值:

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;
}