2016-10-30 2 views
0

Ich habe ein drei Array und ich muss marge oder konvertieren zu flachen Array, aber ich kann nicht.Wie konvertiert man drei Arrays in flache Arrays?

Ich erstelle Baum mit diesem Code.

$fakepages = array(); 
    $fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page'); 
    $fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page'); 
    $fakepages[2] = array('id' => 3, 'parent_id' => 2, 'title' => 'Sub Sub Page'); 
    $fakepages[3] = array('id' => 4, 'parent_id' => 3, 'title' => 'Another Parent Page'); 
    $fakepages[4] = array('id' => 5, 'parent_id' => 0, 'title' => 'Another Parent Page 5'); 
    $fakepages[5] = array('id' => 6, 'parent_id' => 2, 'title' => 'Another Parent Page 5'); 

    $tree = $this->buildTree($fakepages); 
    return $tree; 

private function buildTree(array $elements, $parentId = 0) { 
    $branch = array(); 

    foreach ($elements as $element) { 
     if ($element['parent_id'] == $parentId) { 
      $children = $this->buildTree($elements, $element['id']); 
      if ($children) { 
       $element['children'] = $children; 
      } 
      $branch[] = $element; 
     } 
    } 

    return $branch; 
} 

und das ist meine Art oder marge oder irgendetwas Code. Was ist mein Code-Problem, wie kann ich das beheben und das linke Bild machen? private Funktion findchild ($ trees) { $ arr = array();

foreach ($trees as $tree) { 

     if (isset($tree['children'])) { 
      $this->mes[] = ['id'=>$tree['id'],'parent_id'=>$tree['parent_id']]; 
      $arr[] = $this->findchild($tree['children']); 
     } 
     else{ 
      $this->mes[] = ['id'=>$tree['id'],'parent_id'=>$tree['parent_id']]; 
      $arr[] = $tree; 
     } 
     return $arr; 
    } 
} 
private $mes = []; 

ich habe rechten Teil zu linken Teil konvertieren enter image description here

+0

@Dekel Ich muss sie in der Datenbank speichern und es dem Benutzer zeigen. –

+2

Es sieht aus wie ein PHP-Code, aber Ihre Tags sind Javascript/Jquery. Nach welcher Sprache suchst du? – Dekel

+0

Haben Sie selbst versucht, einen Code zu schreiben? – Dekel

Antwort

1

Sie könnten diese PHP-Funktion verwenden, die Ihre Daten übernimmt eine Reihe von Standard-Klassenobjekte:

function flatten($arr) { 
    $result = []; 
    foreach($arr as $item) { 
     if (isset($item->children)) 
      $result = array_merge($result, flatten($item->children)); 
     unset($item->children); 
     $result[] = $item; 
    } 
    return $result; 
} 

Natürlich Wenn Ihr ursprünglicher Wert JSON ist, müssen Sie ihn zuerst dekodieren und dann nur an diese Funktion weiterleiten:

$arr = json_decode($json); 
// Flatten it 
$arr = flatten($arr); 
// Optionally sort the result 
usort($arr, function($a, $b) { return $a->id - $b->id; }); 

Sehen Sie es auf eval.in

laufen Wenn Ihre Daten von assoziativen Arrays besteht (nicht "Objekte"), dann muss der Code Klammer-Notation verwenden, statt ->:

function flatten($arr) { 
    $result = []; 
    foreach($arr as $item) { 
     if (isset($item['children'])) 
      $result = array_merge($result, flatten($item['children'])); 
     unset($item['children']); 
     $result[] = $item; 
    } 
    return $result; 
} 

und die Art:

usort($arr, function($a, $b) { return $a['id'] - $b['id']; }); 
+0

Entschuldigung, ich kann diesen Code auf meinen Code bitte nicht ausführen. –

+0

[download] (https://ufile.io/e679) –

+0

Sie haben noch ein Problem? Integriere diesen Code einfach in dein Projekt. – trincot

Verwandte Themen