как массировать push с многомерностью в php - PullRequest
0 голосов
/ 22 июня 2019

У меня есть массив в выводе цикла 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 голосов
/ 22 июня 2019

Я абсолютно не понимаю, что вы делаете, но мне кажется, я понял, как ваш вклад может быть сопоставлен с желаемым выходом. Вот код:

<?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, но в вашем образце он отсутствует, и я не уверен, что вы его забыли или по какой-то причине отфильтровали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...