Выровнять laravel коллекция отношений / массив - PullRequest
0 голосов
/ 21 января 2020

У меня проблема с преобразованием массива. Я использовал коллекцию laravel с использованием карты. Или php массив

Array
(
    [0] => Array
        (
            [id] => 3487
            [title_fa] => Father
            [code] => 01
            [father_id] => 0
            [webmaster_id] => 8
            [grandchildren] => Array
                (
                    [id] => 3488
                    [title_fa] => Child 1
                    [code] => 02
                    [father_id] => 3487
                    [grandchildren] => 

                )

        )
     [1] => Array
        (
            [id] => 3489
            [title_fa] => Father 2
            [code] => 03
            [father_id] => 3488
            [grandchildren] => Array
                (
                    [id] => 3490
                    [title_fa] => Child 2
                    [code] => 04
                    [father_id] => 3489
                    [grandchildren] => 
                )

        )

)

. Преобразование массива в массив

Array
(
   [0] => Array
     (
            [title_fa] => Father
            [code] => 01
     )
   [1] => Array
     (
            [title_fa] => Father>Child1,
            [code] => 0102
     )
   [2] => Array
     (
            [title_fa] => Father2
            [code] => 03
     )
   [3] => Array
     (
            [title_fa] => Father2>Child2
            [code] => 0304
     )
)
.

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Хотя ответ уже дан, но вывод не является желаемым выходом OP.

Это можно решить, используя recursion, например:

<?php
$codes=array();
$code="";
$title="";
$outerArray = array();

function callAgain($arr,&$outerArray,&$code,&$title){
   $check=0;
  foreach($arr as $value){
      if(is_array($value)){
         callAgain($value,$outerArray,$code,$title);
      }
      else{
        if($check==0){
            $code.=$arr['code'];
            if($title==""){
                $title.=$arr['title_fa']; 
            }
            else{
             $title.=">".$arr['title_fa'];
            }
            $outerArray[] = array ('title_fa'=>  $title,'code'=>$code);
         $check=1;    
        }  
      }

  }

}



$arr = [
        ['title_fa' => 'Father', 'code' => '02', 'grandchildren'=>[
            'title_fa' => 'Child 1', 'code' => '01', 'grandchildren'=>[
                'title_fa' => 'Child 2', 'code' => '01', 'grandchildren'=> 
                [
                'title_fa' => 'Child 3', 'code' => '01', 'grandchildren'=> '',
            ]
            ]
        ]] 
    ];


callAgain($arr,$outerArray,$code,$title);
print_r($outerArray);

Вывод :

Array
(
    [0] => Array
        (
            [title_fa] => Father
            [code] => 02
        )

    [1] => Array
        (
            [title_fa] => Father>Child 1
            [code] => 0201
        )

    [2] => Array
        (
            [title_fa] => Father>Child 1>Child 2
            [code] => 020101
        )

    [3] => Array
        (
            [title_fa] => Father>Child 1>Child 2>Child 3
            [code] => 02010101
        )

)
0 голосов
/ 21 января 2020

Свести laravel коллекция отношений / массив

public function flatten($array)
{
        $flatArray = [];

        if (!is_array($array)) {
            $array = (array)$array;
        }

        foreach($array as $key => $value) {
            if (is_array($value) || is_object($value)) {
                $flatArray = array_merge($flatArray, $this->flatten($value));
            } else {
                $flatArray[0][$key] = $value;
            }
        }

        return $flatArray;
}

//...
$flatten = $this->flatten($myData);
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...