在数组中循环,同时添加基于另一个值的新键:值对


Loop through an array while adding a new key:value pair based on another value

我在多层阵列中有以下数据

1: id: 41, parent: null, name: lucas
2: id: 52, parent: null, name: george
3: id 98: parent: 41, name: julian
...

每当我运行一个"parent"未设置为null的条目时,我需要循环遍历这个数组和一个'childrens'键和值到父项,同时将+1和这个值相加。如何做到这一点?

1: id: 41, parent: null, name: lucas, children: 1

我在foreach 里试过这个

foreach($post as $parsedPost) {
    if($parsedPost['parent'] > 0){
        $idChild = $parsedPost['id'];
        $idParent = $parsedPost['parent'];
        $post[$idParent]["childrens"]++;
    }
 }

当然,它会返回一个通知,因为索引['childrens']不存在。此外,它将childrens:value添加到第一个子项,而不是添加到父项。为什么?

希望这能有所帮助。

$post[] = ["id" => "41", "parent" => null, "name" => "lucas"];
$post[] = ["id" => "52", "parent" => null, "name" => "george"];
$post[] = ["id" => "98", "parent" => "41", "name" => "Julian"];
foreach ($post as $parsedPost)
{
    if ($parsedPost['parent'] > 0 && $parsedPost['parent'] != "")
    {
        $idChild = $parsedPost['id'];
        $idParent = $parsedPost['parent'];
        $parentKey = array_search($idParent,array_column($post,'id'));
        if(!isset($post[$parentKey]["childrens"]))
        {
            $post[$parentKey]["childrens"] = 0;
        }
        $post[$parentKey]["childrens"]++;
    }
}
print_r($post);

输出:

Array
(
    [0] => Array
        (
            [id] => 41
            [parent] => 
            [name] => lucas
            [childrens] => 1
        )
    [1] => Array
        (
            [id] => 52
            [parent] => 
            [name] => george
        )
    [2] => Array
        (
            [id] => 98
            [parent] => 41
            [name] => Julian
        )
)