PHP 为嵌套数组中的每个值创建面包屑列表
PHP Create breadcrumb list of every value in nested array
我有一个如下所示的数组:
[
'applicant' => [
'user' => [
'username' => true,
'password' => true,
'data' => [
'value' => true,
'anotherValue' => true
]
]
]
]
我想要做的是将该数组转换成如下所示的数组:
[
'applicant.user.username',
'applicant.user.password',
'applicant.user.data.value',
'applicant.user.data.anotherValue'
]
基本上,我需要以某种方式遍历嵌套数组,每次到达叶节点时,将到该节点的整个路径保存为点分隔字符串。
只有以 true
为值的键是叶节点,其他每个节点将始终是一个数组。我将如何着手完成这个?
编辑
这是我迄今为止尝试过的方法,但没有给出预期的结果:
$tree = $this->getTree(); // Returns the above nested array
$crumbs = [];
$recurse = function ($tree, &$currentTree = []) use (&$recurse, &$crumbs)
{
foreach ($tree as $branch => $value)
{
if (is_array($value))
{
$currentTree[] = $branch;
$recurse($value, $currentTree);
}
else
{
$crumbs[] = implode('.', $currentTree);
}
}
};
$recurse($tree);
这个函数可以满足您的需求:
function flattenArray($arr) {
$output = [];
foreach ($arr as $key => $value) {
if (is_array($value)) {
foreach(flattenArray($value) as $flattenKey => $flattenValue) {
$output["${key}.${flattenKey}"] = $flattenValue;
}
} else {
$output[$key] = $value;
}
}
return $output;
}
可以看到运行here.
我有一个如下所示的数组:
[
'applicant' => [
'user' => [
'username' => true,
'password' => true,
'data' => [
'value' => true,
'anotherValue' => true
]
]
]
]
我想要做的是将该数组转换成如下所示的数组:
[
'applicant.user.username',
'applicant.user.password',
'applicant.user.data.value',
'applicant.user.data.anotherValue'
]
基本上,我需要以某种方式遍历嵌套数组,每次到达叶节点时,将到该节点的整个路径保存为点分隔字符串。
只有以 true
为值的键是叶节点,其他每个节点将始终是一个数组。我将如何着手完成这个?
编辑
这是我迄今为止尝试过的方法,但没有给出预期的结果:
$tree = $this->getTree(); // Returns the above nested array
$crumbs = [];
$recurse = function ($tree, &$currentTree = []) use (&$recurse, &$crumbs)
{
foreach ($tree as $branch => $value)
{
if (is_array($value))
{
$currentTree[] = $branch;
$recurse($value, $currentTree);
}
else
{
$crumbs[] = implode('.', $currentTree);
}
}
};
$recurse($tree);
这个函数可以满足您的需求:
function flattenArray($arr) {
$output = [];
foreach ($arr as $key => $value) {
if (is_array($value)) {
foreach(flattenArray($value) as $flattenKey => $flattenValue) {
$output["${key}.${flattenKey}"] = $flattenValue;
}
} else {
$output[$key] = $value;
}
}
return $output;
}
可以看到运行here.