php - 递归循环遍历多维数组并跟踪父数组
问题描述
这是我正在使用的数组的简短版本:
Array
(
[orders] => Array
(
[0] => Array
(
[id] => 123
[email] => somemail@mail.com
[line_items] => Array
(
[0] => Array
(
[id] => 456
)
)
)
)
)
我想遍历它并回显每个 $key => $value 对,但要跟踪“父”数组。使用此功能时:
function recursive($array, $level = 0){
foreach($array as $key => $value){
if(is_array($value)){
recursive($value, $level + 1);
} else{
echo $key . ": " . $value, "\n";
}
}
}
我得到:
id: 123
email: somemail@mail.com
id: 456
我想将父数组保留在值的前面,以便我知道哪个id
被回显。
orders_0_id: 123
orders_0_email: somemail@mail.com
line_items_0_id: 456
更新的工作解决方案:
function recursive($array, $level = -1,array $parentKey = []){
foreach($array as $key => $value){
$newKey = array_merge($parentKey, [$key]);
if(is_array($value)){
recursive($value, $level + 1, $newKey);
} else{
$parent = implode('_', $newKey);
echo $parent . ": " . $value, "\n";
}
}
}
解决方案
我认为这就是您要查找的内容,但可能信息太多。
给定这个数组:
$data = [
'orders' => [
[
'id' => 123,
'email' => 'text@example.com',
'line_items' => [
[
'id' => 356,
],
],
],
],
];
您可以跟踪数组中的父键:
function dumper(array $array, array $parentKey = [])
{
foreach ($array as $key => $value) {
$newKey = array_merge($parentKey, [$key]);
if (is_array($value)) {
dumper($value, $newKey);
} else {
$s = implode('_', $newKey) . ": " . $value . "\n";
echo $s . PHP_EOL;
}
}
}
dumper($data);
这会产生:
orders_0_id: 123
orders_0_email: text@example.com
orders_0_line_items_0_id: 356
推荐阅读
- php - 在 foreach 循环中将键从数组添加到现有数组值
- typescript - 推送屏幕上未定义的 React Native Navigation 道具
- algorithm - 从函数自动构建决策树
- c# - 如何在 .Net Core 2.2 中解决 Microsoft.AspNetCore.Mvc.Internal.ActionContext.GetNormalizedRouteValue
- react-native - 如何根据显示尺寸对 ImageBackground 进行平方?
- vue.js - store getter 返回观察者对象而不是 null
- java - 如何在以特定数字开头的地图中查找值
- javascript - Angular2-mentions - 如何从 Angular 4 中的 angular2-mentions 添加 URL 链接到提到的用户
- linux - 为 linux 构建没有 PNG_READ_eXIf_SUPPORTED 的 libpng
- javascript - 在 UWP Javascript 中,有什么方法可以检测到辅助窗口已关闭?