我有以下数组:
$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'
这甚至有可能实现吗?以及采用哪种方式?我真的为此而伤脑筋。我根本不知道如何开始。
谢谢。
答案 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;
}
请确保在其中进行一些错误检查(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]];