如何在php中使用多维数组进行数组推送

时间:2019-06-22 04:02:01

标签: php arrays multidimensional-array

我在PHP循环输出中有一个这样的数组 这是我的PHP代码:

  $sql = "SELECT * FROM `acc`  ";
  $stm = $conn->prepare($sql);
             $stm->execute();
                  $array= [];
                  while ($row = $stm->fetch(PDO::FETCH_ASSOC)) {

                      $array[]=$row['h_id'];


                  }
            print_r($array);

,输出为:

  Array
    (    [0] => 11
         [1] => 12
         [2] => 13
         [3] => 1101
         [4] => 1102
         [5] => 110101
         [6] => 110102
         [7] => 1201
         [8] => 1202
         [9] => 1301
         [10] => 1302
         [11] => 1303
         [12] => 130201
         [13] => 130202
         [14] => 130301
         [15] => 130302

    )

我想使用php Loop对父级和子级数组进行排序和重新排列为多维:

Array
        ( 
[11] => Array
        (
            [1101] => Array
                (
                    [0] => 110101
                    [1] => 110102


                )
           )
 [12] => Array
        (
            [0] => 1201
            [1] => 1202
                  )
 [13] => Array
        (
             [0] => 1301

             [1302] => Array
                (
                    [0] => 130201
                    [1] => 130202
              )
             [1303] => Array
                (
                    [0] => 130301
                    [1] => 130302
                     )
   )

如何使用php实现和将数组推入另一个数组。 谢谢!

1 个答案:

答案 0 :(得分:0)

我绝对不了解您在做什么,但是我想我已经掌握了您的输入如何映射到所需的输出。这是代码:

<?php
$flat = [
    11,
    12,
    13,
    1101,
    1102,
    110101,
    110102,
    1201,
    1202,
    1301,
    1302,
    1303,
    130201,
    130202,
    130301,
    130302,
];

function expand($flat)
{
    $expanded = [];

    foreach ($flat as $element) {
        $sections = str_split((string)$element, 2);

        $tmp = &$expanded;
        $path = '';
        foreach ($sections as $section) {
            $path .= $section;
            if (!isset($tmp[$path])) {
                $tmp[$path] = [];
            }
            $tmp =& $tmp[$path];
        }
        unset($tmp);
    }

    return $expanded;
}

function fold($expanded) {
    $folded = [];

    foreach ($expanded as $key => $value) {
        if ($value === []) {
            $folded[] = $key;
        } else {
            $folded[$key] = fold($value);
        }
    }

    return $folded;
};

print_r(fold(expand($flat)));

这是它的输出(可疑地接近您的输出):

Array
(
    [11] => Array
        (
            [1101] => Array
                (
                    [0] => 110101
                    [1] => 110102
                )

            [1102] => 1102
        )

    [12] => Array
        (
            [0] => 1201
            [1] => 1202
        )

    [13] => Array
        (
            [0] => 1301
            [1302] => Array
                (
                    [0] => 130201
                    [1] => 130202
                )

            [1303] => Array
                (
                    [0] => 130301
                    [1] => 130302
                )

        )

)

尽管有一些差异,例如输入中有1102元素,但示例输出中没有元素super(),我不确定是否忘记了它或是否出于某种原因将其滤除了。