如何从数组值生成多维数组

时间:2018-02-02 10:50:01

标签: php laravel

我是php的新手,我实际上需要从数组值生成多维数组。 例如,我的数组就是这样,并记住所有数组和值都是动态的

array(
0 => array(
    0 => "college"
    1 => "student"
    2 => "contact"
),
1 => array(
    0 => "college"
    1 => "parents"
    2 => "contact"
),
2 => array(
    0 => "school"
    1 => "parents"
    2 => "contact"
),
3 => array(
    0 => "school"
    1 => "student"
    2 => "contact"
))

我想要那样的结果

 0 => array (
"college" => array(
    "student" => array (
        "contact" => array (
          "address" => "address_value"
        )
    ),
    "parents" => array (
        "contact" => array (
          "address" => "address_value"
        )
    ),
),
"school" => array(
    "student" => array (
        "contact" => array (
          "address" => "address_value"
        )
    ),
    "parents" => array (
        "contact" => array (
          "address" => "address_value"
        )
    ),
)),

我想生成多维数组,直到数组值和最后一个数组有一些值

任何人都可以用标准方式帮助我。 帮助将赞赏.. 提前谢谢

1 个答案:

答案 0 :(得分:2)

试试这个:

<?php
function group($a, $level, $previous = '') {
    $b = [];
    for( $i = 0, $n = count($a); $i < $n; ++$i ) {
        if( $level > 0 && $a[$i][$level-1] !== $previous  ) {
            continue;
        }
        $key = $a[$i][$level];
        $b[$key] = [];
        if( array_key_exists($level+1, $a[$i]) ) {
            $b[$key] = group($a, $level+1, $key);
        }
    }
    return $b;
}

print_r(group($a, 0));

输出:

Array(
    [college] => Array (
        [student] => Array (
            [contact] => Array ()
        )
        [parents] => Array (
            [contact] => Array ()
        )
    )
    [school] => Array (
        [student] => Array (
            [contact] => Array ()
        )
        [parents] => Array (
            [contact] => Array ()
        )
    )
)

使用@AlivetoDie示例:

Array (
    [college] => Array (
        [student] => Array (
            [contact] => Array ()
        )
        [parents] => Array (
             [contact] => Array ()
        ) 
    ) 
    [school] => Array (
        [parents] => Array (
            [contact] => Array ()
        )
        [student] => Array (
             [contact] => Array ()
        ) 
        [data] => Array (
             [contact] => Array()
        )
    )
)