php - 特殊数组中的PHP foreach
问题描述
我需要一些帮助来遍历一个嵌套数组中的所有值。我需要将 ID 恢复到数组中,并从父数组中恢复 ID。第一级必须是 parent_id = 0,订单是父数组中的 id。
Array
(
[0] => Array
(
[id] => 3
[children] => Array
(
[0] => Array
(
[id] => 13
)
[1] => Array
(
[id] => 48
[children] => Array
(
[0] => Array
(
[id] => 52
)
[1] => Array
(
[id] => 61
)
)
)
)
)
[1] => Array
(
[id] => 10
[children] => Array
(
[0] => Array
(
[id] => 54
[children] => Array
(
[0] => Array
(
[id] => 55
[children] => Array
(
[0] => Array
(
[id] => 56
)
)
)
)
)
)
)
)
我正在使用以下 PHP 脚本来恢复数据:
function readClass($k, $v, &$parent_id, &$new_id, &$order_id ) {
$out = "";
if (!is_array($v)) {
$out .= "<li>id:$v | parent_id:$parent_id | order:$order_id ";
if (($parent_id == "0") || ($new_id == "S")) {
$parent_id = $v;
$new_id = 'N';
}
} else {
foreach($v as $k2=>$v2) {
$order_id++;
$out .= readClass($k2, $v2, $parent_id, $new_id, $order_id);
}
}
return $out;
}
foreach($someArray as $key=>$value) {
$parent_id = '0';
$order_id = '0';
$new_id = 'N';
echo readClass($key, $value, $parent_id, $new_id, $order_id );
}
结果是:
id:3 | parent_id:0 | order:1
id:13 | parent_id:3 | order:4
id:48 | parent_id:3 | order:6
id:52 | parent_id:3 | order:9
id:61 | parent_id:3 | order:11
id:10 | parent_id:0 | order:1
id:54 | parent_id:10 | order:4
id:55 | parent_id:10 | order:7
id:56 | parent_id:10 | order:10
我想像这样恢复:
id:3 | parent_id:0 | order:1
id:13 | parent_id:3 | order:4
id:48 | parent_id:3 | order:6
id:52 | parent_id:48 | order:9
id:61 | parent_id:48 | order:11
id:10 | parent_id:0 | order:1
id:54 | parent_id:10 | order:4
id:55 | parent_id:54 | order:7
id:56 | parent_id:55 | order:10
注意 parent_id 与 id (52,61,55,56) 的区别。是问题...
有任何想法吗?
解决方案
我做的事情有点不同。我不知道 new_id 的目的是什么,但我认为您的代码中没有使用它。
您正在迭代数组中的每个项目,而不是了解结构并解决它。
下面的代码片段只是迭代每个项目,只要它有孩子就继续向下,更新 parentId。
function readClass($arr,$parentId = 0,&$order = 0){
echo $arr['id'] . ', ' . $parentId . ', ' . $order . "\n";
if(isset($arr['children'])){
foreach($arr['children'] as $child){
$order++;
readClass($child,$arr['id'],$order);
}
}
}
不过,订单不会和你的一样。
推荐阅读
- python - 如何检查一个人是否包含在模型中以制作工作/帖子
- angular - Angular 8 - 从两个不同的组件订阅一项服务
- xml - 将 XML 转换为 XPath 格式
- c# - 复选框不会取消选中
- r - 将 char 转换为 mutate 中的数字数据分配给数据框变量
- excel - 从 Excel 文件中获取下拉列表的值
- javascript - 反应原生:有办法做一个手风琴表吗?
- google-bigquery - 使用 BigQuery Geo Viz 可视化多边形及其质心
- flutter - Dart Experts - 按不同值对列表进行分组,并计算总和
- c - OpenSSL:如何从 RSA 结构中导出 RSA 密钥?