在键中添加具有父值的数组的值 - PHP

时间:2014-08-11 14:35:05

标签: php arrays

基本上我有这个数组$data

Array
(
    [0] => Array
        (
            [id] => 2
            [parent] => 0
            [title] => produit 1
            [path] => produit-1
        )

    [1] => Array
        (
            [id] => 3
            [parent] => 0
            [title] => Produit 2
            [path] => produit-2
        )

    [2] => Array
        (
            [id] => 4
            [parent] => 0
            [title] => Produit 3
            [path] => produit-3
        )

    [3] => Array
        (
            [id] => 5
            [parent] => 0
            [title] => Produit 4
            [path] => produit-4
        )

    [4] => Array
        (
            [id] => 6
            [parent] => 2
            [title] => Sous produit 10
            [path] => sous-produit-10

        )

    [5] => Array
        (
            [id] => 7
            [parent] => 2
            [title] => Sous produit 11
            [path] => sous-produit-11
        )

)

我想检查data[$key]['parent']中是否存在['id'],如果是,它会将数组的title与其父级连接起来:

Array
    (
        [produit 1] => Array
            (
                [0] => Sous produit 11
                [1] => Sous produit 10
            )

        [Produit 2] => Produit 2
        [Produit 3] => Produit 3
        [Produit 4] => Produit 4
    )

这是我尝试过但没有做的事情:

foreach ($data as $key => $value) {
        $rslt[$value['id']]= $value;    
    }

$output = array();
foreach ($rslt as $key => $value) {
    if(array_key_exists($value['parent'],$rslt)){
        $new_key = $rslt[$value['parent']]['title'];
        $output[$new_key][] = $value['title'];
    }
    else $output[$value['title']] = $value['title'];
}

我能做到这一点吗?非常明确。

1 个答案:

答案 0 :(得分:0)

您尝试按标题获取父级,但您将父级ID保存为键

// create id => data array
foreach($data as $key => $value) {
    $rslt[$value['id']] = $value;
}

$output = array();
// create id => labels array
foreach($rslt as $key => $value) {
    if(array_key_exists($value['parent'], $rslt)) {
        // append title to parent
        $output[$value['parent']][] = $value['title'];
    } else {
        // forgot to add parents 
        $output[$value['id']] = array($value['title']);
    }
}

$final = array();
// create parent label => labels array
foreach($output as $key => $value) {
    $final[$value[0]] = $value; // parent will always be first array item
}