是否有一种优雅的方法可以将数组转换为多维键并添加值?
$value = "You found the giant!"
$keys = array("fee", "fi", "fo", "fum");
$output[ flipster( $keys ) ] = $value;
// $output['fee']['fi']['fo']['fum'] = "You found the giant!";
我写了这个功能,它起作用了做我需要做的事情,但我不认为这是最好的解决方案......
function flipster( $array, $value ) {
$out = array();
$key = $array[0];
array_shift( $array );
if( count( $array ) > 0 ) {
$out[ $key ] = flipster( $array, $value );
} else {
$out[ $key ] = $value;
}
return $out;
}
最后,我从循环中得到了“费用”和“fi”,所以在循环中我正在做这样的事情来创建一个新数组:
$out = array_merge_recursive($out, flipster( $keys, $value ) );
答案 0 :(得分:0)
function flipster( array &$target, array $keys, $value ) {
if(empty($keys)){
return false;
}
$ref = &$target;
foreach($keys as $key){
if(!isset($ref[$key])){
$ref[$key] = array();
}
$ref = &$ref[$key];
}
$ref = $value;
return true;
}
$bucket = array();
flipster($bucket, array('x', 'y', 'z'), 'test1');
flipster($bucket, array('x', 'y', 'a'), 'test2');
flipster($bucket, array('a', 'b', 'c'), 'test3');
flipster($bucket, array('a', 'b', 'd'), 'test4');
flipster($bucket, array('a', 'c', 'e'), 'test5');
var_dump($bucket);
尝试使用此尺寸。可以将多个翻转组合到同一个array()
中。使您可以轻松构建深度数组树。 它使用深度数组构建的引用,而不是递归函数。
答案 1 :(得分:0)
如何使用递归:
function flipster( $arr, $value ) {
if(count($arr)==1){
return array($arr[0] => $value);
}
return array(array_shift($arr) => flipster( $arr, $value ));
}
$value = "You found the giant!";
$keys = array("fee", "fi", "fo", "fum");
$output = flipster( $keys, $value );
echo $output["fee"]["fi"]["fo"]["fum"];