Reindex PHP Nested Array - PullRequest
       13

Reindex PHP Nested Array

0 голосов
/ 10 сентября 2018

После печати моего $my_values['outer_group']['fieldset'] я получаю следующий вывод в соответствии с данными:

Array
(
 [fieldset] => Array
  (
   [1] => Array
    (
     [title] => Dummy_Value1
     [inner_group] => Array
      (
       [fieldset] => Array
        (
         [1] => Array
          (
           [id] => 11
           [title] => Dummy_Value11
          )

         [2] => Array
          (
           [id] => 12
           [title] => Dummy_Value12
          )

         [3] => Array
          (
           [id] => 13
           [title] => Dummy_Value13
          )

         [actions] => Array
          (
           [add] => Add InnerGroup
           [remove] => Remove InnerGroup
          )

        )

      )

    )

   [2] => Array
    (
     [title] => Dummy_Value2
     [inner_group] => Array
      (
       [fieldset] => Array
        (
         [1] => Array
          (
           [id] => 21
           [title] => Dummy_Value21
          )

         [actions] => Array
          (
           [add] => Add InnerGroup
          )

        )

      )

    )

   [actions] => Array
    (
     [add] => Add OuterGroup
     [remove] => Remove OuterGroup
    )

  )

)

Мое требование состоит в том, чтобы переиндексировать выходные данные, поэтому я выполнил следующий код дляпереиндексировать то же самое:

<?php
if (isset($my_values['outer_group']) && !empty($my_values['outer_group'])) {
  $outer_types = $my_values['outer_group']['fieldset'];
  $inner = [];
  foreach ($outer_types as $outer_key => $outer_value) {
    if (is_numeric($outer_key)) {
      if (isset($outer_value['inner_group']['fieldset'])) {
        foreach ($outer_value['inner_group']['fieldset'] as $k => $v) {
          if (is_numeric($k)) {
            $inner[] = [
              'id' => $v['id'],
              'title' => !empty($v['title']) ? $token->replace($v['title']) : NULL,
            ];
          }
        }
      }
      $my_values['outer'][$outer_key] = [
        'title' => !empty($outer_value['title']) ? $token->replace($outer_value['title']) : NULL,
        'inner' => $inner,
      ];
    }
  }
}

В соответствии с выходом его переиндексируется, но с некоторыми ошибками в данных.У меня возникают проблемы при заполнении данных [inner], следующий вывод такой же:

Array
(
  [0] => Array
    (
      [title] => Dummy_Value1
      [inner] => Array
        (
          [0] => Array
            (
              [id] => 11
              [title] => Dummy_Value11
            )

          [1] => Array
            (
              [id] => 12
              [title] => Dummy_Value12
            )

          [2] => Array
            (
              [id] => 13
              [title] => Dummy_Value13
            )

        )

    )

  [1] => Array
    (
      [title] => Dummy_Value2
      [inner] => Array
        (
          [0] => Array
            (
              [id] => 11
              [title] => Dummy_Value11
            )

          [1] => Array
            (
              [id] => 12
              [title] => Dummy_Value12
            )

          [2] => Array
            (
              [id] => 13
              [title] => Dummy_Value13
            )

          [3] => Array
            (
              [id] => 21
              [title] => Dummy_Value21
            )

        )

    )

)

Принимая во внимание, что это должно быть:

Array
(
  [0] => Array
    (
      [title] => Dummy_Value1
      [inner] => Array
        (
          [0] => Array
            (
              [id] => 11
              [title] => Dummy_Value11
            )

          [1] => Array
            (
              [id] => 12
              [title] => Dummy_Value12
            )

          [2] => Array
            (
              [id] => 13
              [title] => Dummy_Value13
            )

        )

    )

  [1] => Array
    (
      [title] => Dummy_Value2
      [inner] => Array
        (
          [0] => Array
            (
              [id] => 21
              [title] => Dummy_Value21
            )

        )

    )

)

1 Ответ

0 голосов
/ 10 сентября 2018

$inner = []; должен находиться внутри цикла foreach, чтобы он был пустым перед построением каждого внутреннего элемента.

Не проверено - но следующим образом:

<?php
if (isset($my_values['outer_group']) && !empty($my_values['outer_group'])) {
  $outer_types = $my_values['outer_group']['fieldset'];
  foreach ($outer_types as $outer_key => $outer_value) {
    $inner = [];
    if (is_numeric($outer_key)) {
      if (isset($outer_value['inner_group']['fieldset'])) {
        foreach ($outer_value['inner_group']['fieldset'] as $k => $v) {
          if (is_numeric($k)) {
            $inner[] = [
              'id' => $v['id'],
              'title' => !empty($v['title']) ? $token->replace($v['title']) : NULL,
            ];
          }
        }
      }
      $my_values['outer'][$outer_key] = [
        'title' => !empty($outer_value['title']) ? $token->replace($outer_value['title']) : NULL,
        'inner' => $inner,
      ];
    }
  }
}
...