Как добавить родительский идентификатор к каждому дочернему элементу в массиве? php

#php #arrays #codeigniter #sorting #hierarchy

#php #массивы #codeigniter #сортировка #иерархия

Вопрос:

Привет, ребята, мне было интересно, как я могу добавить родительский идентификатор в дочерние элементы?

Пример: MY_ARRAY

 (
[id] => 4
[children] => Array
    (
        [0] => Array
            (
                [id] => 18
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 21
                            )
                        [1] => Array
                            (
                                [id] => 22
                            )
                    )
            )
        [1] => Array
            (
                [id] => 19
            )
        [2] => Array
            (
                [id] => 20
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 26
                            )
                    )
            )
    )
)
  

И на данный момент это коды, которые я сделал, но все еще не дал мне правильного результата.

 $in = MY_ARRAY
function generateArray($in, $out, $parent = 0, $prev_par = 0){
    foreach($in as $key => $value) {
        $childs = false;
        if(isset($value['children'])){ // if there is children
            $childs = $value['children'];
            unset($value['children']);              
        }
        if($prev_par != $parent){
            $prev_par = $parent;
        }
        else{
            $prev_par = $prev_par;
        }
        $out[] = array($value['id'],$parent,$prev_par);
        if($childs){
            $parent = $value['id'];
            $out = $this->generateArray($childs, $out, $parent, $prev_par);
        }
    }
    return $out;
}
  

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

Вывод может выглядеть следующим образом. Пока я могу добавить родительский идентификатор.

 [id] => 4
[P_id] => 0
[children] => Array
    (
        [0] => Array
            (
                [id] => 18
                [P_id] => 4
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 21
                                [P_id] => 18
                            )
                        [1] => Array
                            (
                                [id] => 22
                                [P_id] => 18
                            )
                    )
            )
        [1] => Array
            (
                [id] => 19
                [P_id] => 4
            )

        [2] => Array
            (
                [id] => 20
                [P_id] => 4
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 26
                                [P_id] => 20
                            )
                    )
            )
    )
)
  

Здесь действительно нужна помощь, спасибо, ребята…

Комментарии:

1. Поделитесь своим $in массивом, который является первым параметром функции.

2. обязательно обновлю его @AHJeebon — это MY_ARRAY

Ответ №1:

Ваша проблема решена, проверьте это. Функция рекурсивно нажимается p_id , и еще один момент — если массив содержит числовой индекс, он перейдет к нажатию p_id .

Функция:

 function generateArray($in, $parent = 0){
  foreach ($in as $key => $value) {
    if(is_numeric($key)){
        $in = $value;
        $out[$key] = generateArray($in, $parent);
    }else{
      $out[$key]=$value;
      if($key=="id"){
        $out['p_id']=$parent;
        $parent=$value;
      }elseif($key=="children"){
        $in = $value;
        $out[$key] = generateArray($in, $parent);
      }
    }
  }
  return $out;
}
  

Рабочий пример:

 $my_array =array(
  'id'=> 4,
  'children'=> Array(
    '0'=> Array(
      'id'=> 18,
      'children'=> Array(
          '0'=> Array(
            'id'=> 21,
          ),
          '1'=> Array(
            'id'=> 22,
          ),
        ),
    ),
    '1'=> Array(
      'id'=> 19,
    ),
    '2'=> Array(
      'id'=> 20,
      'children'=> Array(
        '0'=> Array(
          'id'=> 26,
        ),
      ),
    ),
  )
);

$newarray = generateArray($my_array);
print_r($newarray);
  

Комментарии:

1. У вас есть какая-либо ссылка на создание этой функции?

2. Мне потребовалось некоторое время, чтобы создать эту функцию. Но я следовал некоторой форме примера здесь: ссылка

3. Спасибо, я также проверю эту ссылку! : D

4. привет! Я пытался и добавлял значение после [p_id], которое является [inc]

5. [id] => 4 [P_id] => 0 [inc] => 1 [дочерние элементы] => Массив ( [0] => Массив ( [id] => 18 [P_id] => 4 [inc] => 2 [дочерние элементы] => Массив ( [0]=> Array ( [id] => 21 [P_id] => 18 [inc] => 3 ) ) ) [1] => Массив ( [id] => 19 [P_id] => 4 [inc] => 5 )