我想做的是有一个接受两个参数的函数,两个数组,第一个是不同长度的一维数组,第二个是不同深度和长度的多维数组。第一个数组永远不会关联,第二个数组总是一个完全关联的数组。
此函数将从多维数组返回所请求的值,如第一个数组所示。
假设第一个数组将始终是手写的并传递给此函数。这意味着开发人员总是知道有一个值要从多维数组返回,并且永远不会将请求传递给不存在值的函数。
我认为下面的代码是我正在努力实现的最好的例子。
//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
答案 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;
}