我不确定怎么称呼这个,我找不到我要找的东西,因为我一定在寻找错误的关键词,所以即使是正确的搜索词也能帮到我在这里:
我有一个$ map数组和一个$ data数组。 $ data数组是一个基于解析的xml的动态数组。简化示例:
$data = array('a' => array(0=> array('hello'=>'I want this data')));
$map = array('something' => 'a.0.hello');
现在,我想通过$test
以某种方式在$data['a']['0']['hello']
导航,将$map['something']
设置为{{1}}的值。这背后的想法是创建一个映射数组,这样如果要更改xml格式,则不需要更改代码,只需要更改映射数组。非常感谢任何有关良好方向的帮助:)
答案 0 :(得分:3)
// Set pointer at top of the array
$path = &$data;
// Asume that path is joined by points
foreach (explode('.', $map['something']) as $p)
// Make a next step
$path = &$path[$p];
echo $path; // I want this data
答案 1 :(得分:1)
在PHP中(或者我能想到的任何其他语言),以编程方式访问数组中的嵌套键并不是一个好方法。
function getDeepValue(&$arr, $keys) {
if (count($keys) === 0)
return $arr;
else
return getDeepValue($arr[$keys[0]], array_slice($keys, 1));
}
$data = ['a' => [0=> ['hello'=>'I want this data']]];
$map = ['something' => getDeepValue($data, ['a', '0', 'hello'])];
var_dump($map);
// array(1) {
// ["something"]=>
// string(16) "I want this data"
// }
如果您想使用密钥串,请使用
getDeepValue($arr, explode('.', 'a.0.hello'))
如果这是您必须执行的常见操作,您可以添加另一层抽象,接受基于字符串的深度值查找。