2016-08-01 8 views
2

Ich würde wirklich etwas Hilfe hier zu schätzen wissen. Ich werde verrückt.Schleife durch ein Array beim Hinzufügen eines neuen Schlüssels: Wert-Paar basierend auf einem anderen Wert

I wurden folgende Daten in einem Multi-Level-arrarray

1: id: 41, parent: null, name: lucas 
2: id: 52, parent: null, name: george 
3: id 98: parent: 41, name: julian 
... 

Ich brauche diese Anordnung eine Schleife durch und eine 'childrens' Schlüssel und Wert der Mutter während +1 jedes Mal i über einen auf diesen Wert Summieren laufen Eintrag, bei dem 'Eltern' nicht auf Null gesetzt ist. Wie erreiche ich das?

1: id: 41, parent: null, name: lucas, children: 1 

Ich habe versucht, dies in einem foreach

foreach($post as $parsedPost) { 
    if($parsedPost['parent'] > 0){ 
     $idChild = $parsedPost['id']; 
     $idParent = $parsedPost['parent']; 
     $post[$idParent]["childrens"]++; 
    } 
} 

Natürlich ist es eine Nachricht gibt, da der Index ['childrens'] existiert nicht. Außerdem fügt es die childrens:value zu den ersten Kindern und nicht zu den Eltern hinzu. Warum? D:

+0

Von wo diese '$ idPai' kam? – Saurabh

+0

Sorry @Saurabh, es soll $ idParent sein, ich habe die Var-Namen vor dem Posten übersetzt und diesen vergessen. BEARBEITEN: –

+0

behoben, um den Hinweis zu entfernen add 'if (! Isset ($ post [$ idParent] [' childrens ']))) {$ post [$ idParent] [' childrens '] = 0; } 'vor der Zeile, die das Inkrement enthält. – olegsv

Antwort

1

Hoffe das hilft.

$post[] = ["id" => "41", "parent" => null, "name" => "lucas"]; 
$post[] = ["id" => "52", "parent" => null, "name" => "george"]; 
$post[] = ["id" => "98", "parent" => "41", "name" => "Julian"]; 

foreach ($post as $parsedPost) 
{ 
    if ($parsedPost['parent'] > 0 && $parsedPost['parent'] != "") 
    { 
     $idChild = $parsedPost['id']; 
     $idParent = $parsedPost['parent']; 
     $parentKey = array_search($idParent,array_column($post,'id')); 
     if(!isset($post[$parentKey]["childrens"])) 
     { 
      $post[$parentKey]["childrens"] = 0; 
     } 
     $post[$parentKey]["childrens"]++; 
    } 
} 
print_r($post); 

Ausgang:

Array 
(
    [0] => Array 
     (
      [id] => 41 
      [parent] => 
      [name] => lucas 
      [childrens] => 1 
     ) 

    [1] => Array 
     (
      [id] => 52 
      [parent] => 
      [name] => george 
     ) 

    [2] => Array 
     (
      [id] => 98 
      [parent] => 41 
      [name] => Julian 
     ) 

) 
+0

Ihr Code funktioniert, danke! Aber es überspringt 1 Kinder für alle Einträge, die Kinder haben. Weißt du, warum? –

+0

Ich habe dich nicht verstanden, kannst du das genauer erklären? – Saurabh

+0

'Eintrag 1 in meiner Datenbank hat 6 Kinder und Ihr Skript berechnet 6 Kinder.während ' Eintrag 2 auf meiner Datenbank hat 3 Kinder und Ihr Skript berechnet 2 Kinder.' Ich bin verrückt über diese: D Freut mich helping –