php递归键重命名仅用于内部数组
Posted
技术标签:
【中文标题】php递归键重命名仅用于内部数组【英文标题】:php recursive key renaming for inner arrays only 【发布时间】:2019-07-04 12:19:44 【问题描述】:我在这里需要位方向来重命名内部深度未知的内部子键。原始数组是通过 id 和 parent_id 关系创建的父子多维数组。这是数组的一个例子
$testArray = array (
"name" => "Test name",
"someValue1" => 834.69,
"someMoreValue" => 33.4,
"someCode" => 6668,
"child" => array
(
array
(
"name" => "Some name",
"someValue1" => 471.05,
"someMoreValue" => 18.84,
"someCode" => 7064,
"child" => array
(
array
(
"name" => "Yet another name",
"someValue1" => 438.62,
"someMoreValue" => 17.56,
"someCode" => 7065
),
array
(
"name" => "Da name",
"someValue1" => 4444,
"someMoreValue" => 44,
"someCode" => 7044
)
)
),
array
(
"name" => "name",
"someValue1" => 2222,
"someMoreValue" => 22,
"someCode" => 7022
)
)
);
到目前为止,这是我的尝试,我只能重命名第一级的孩子。
function keyprefix($keyprefix, $keyprefix2, Array $array)
foreach($array as $k=>$v)
$array[$keyprefix.'-'.$k.'-'.$keyprefix2] = $v;
unset($array[$k]);
return $array;
function test($array)
$newArr = array();
foreach ($array as $key => $value)
// $newArr[] = is_array($value) ? test($value) : $value;
// $newArr[] = is_array($value) ? $array : array_merge( keyprefix("$name","Alt Danışman", $array[$key]) );
$index = 0;
$name = $array['name'];
if (is_array($value))
//if (is_array($value))
// test($value);
//
$newArr[$key] = array_merge(
keyprefix("$name","Under Child", $array[$key])
);
else
$newArr[$key] = $value;
return $newArr;
echo highlight_string(var_export(test($testArray), true));
关于如何解决这个问题的任何想法?我觉得我很接近,只需要在正确的道路上得到一点指导。我已经看到了许多堆栈溢出等示例,但需要一些帮助。我知道递归还不是我最好的技能。
【问题讨论】:
您还想将它们重命名为什么?基于深度的东西,或者父名,或者??? 嘿@Nick 我添加了我的代码图片,你可以看到我根据相应的父名称和一些文本重命名了它们。keyprefix
实际上是重命名提供的数组的所有键
仅重命名带有关键子元素的数组还是重命名每个内部数组?
只有键名子有内部数组@shingo
【参考方案1】:
function TryRenameChildren(array $array)
if(isset($array['child']))
$array['child'] = keyprefix($array['name'], 'prefix2', $array['child']);
foreach($array['child'] as $key => $value)
if(is_array($value))
$array['child'][$key] = TryRenameChildren($value);
return $array;
$testArray = TryRenameChildren($testArray);
【讨论】:
daymm!谢谢@shingo 我不明白,当我能够深入理解递归时。有时我只是很烂:(以上是关于php递归键重命名仅用于内部数组的主要内容,如果未能解决你的问题,请参考以下文章