2016-09-02 2 views
1

Ich bin ein Anfänger PHP-Programmierer. Ich habe heute ein Problem gefunden. hier die Sache.Wie liest man ein Array, das viele verschachtelte Entity

Ich habe ein Array wie diese

$array = array("id" => 1, 
       "region"=>"world", 
       "parentid" => 0, 
       "children" => array("id" => 39, 
            "region"=>"asia", 
            "parentid" => 1, 
            "children" => array("id" => 70, 
                 "region"=>"china", 
                 "parentid" => 39 
                 ) 
           ) 
      ); 

ich einige Ergebnis wie dieses structrue erhalten möchten.

world 
    |- asia 
    |----- china 

Hier ist mein Code, es sieht sehr schlecht aus, obwohl es funktioniert. aber es würde nicht gut funktionieren, wenn das Niveau mehr als 3.

$array = array(); 
$count = 0; 
for ($i = 0; $i < count($dep); $i++) { 
$array[]["region"] = $dep[$i]["region"]; 
if (isset($dep[$i]["children"])) { 
    for ($ii = 0; $ii < count($dep[$i]["children"]); $ii++) { 
     $array[]["region"] = $dep[$i]["children"][$ii]["region"]; 
     if (isset($dep[$i]["children"][$ii]["children"])) { 
      for ($iii = 0; $iii < count($dep[$i]["children"][$ii]["children"]); $iii++) { 
       $array[]["region"] = $dep[$i]["children"][$ii]["children"][$iii]["region"]; 
      } 
     } 
    } 
} 
} 

return $array; 

Es muss eine bessere Lösung geben, um das Problem zu lösen. Jede Hilfe wäre zu schätzen.

+2

Sie möchten wahrscheinlich eine rekursive Funktion dafür schreiben. – Rizier123

+0

müssen Sie eine rekursive Funktion schreiben. – Manish

+0

Blick auf einige Link, der Ihnen eine Vorstellung geben, wie rekursive Funktion [https://www.copterlabs.com/build-menu-with-recursive-functions/] schreiben [http://lornajane.net/posts/2012/php-recursive-function-example-faktorial-nummern] – Manish

Antwort

0

Sie sollten Rekursion nutzen. Das bedeutet eine Funktion, die sich selbst aufruft. Lassen Sie mich hier eine Funktion einfügen:

$array = [ 
    [ 
    "region" => "world", 
    "children" => [ 
     [ 
     "region"=> "asia", 
     "children" => [ 
      [ "region"=> "china" ], 
     ] 
     ], 
     [ 
     "region"=> "europe", 
     "children" => [ 
      [ "region"=>"czech republic" ], 
     ] 
     ] 
    ] 
    ] 
]; 


function format($dataset, $prefix = '') 
{ 
    foreach ($dataset as $data) { 
    echo $prefix . ' ' . $data['region'] . '<br>'; 

    if (! isset($data['children'])) { 
     return; 
    } 

    format($data['children'], $prefix . '--'); 
    } 
} 

format($array); 

Sie müssen die Struktur des Arrays ein bisschen ändern, aber die Funktion ist viel einfacher. Auch die id und parent Schlüssel werden überflüssig.

+0

Danke, ich habe den Code ausprobiert, aber es würde nicht gut funktionieren. es Echo wie folgt: Welt - andere Regionen verschwunden. – Bluestone

Verwandte Themen