2017-12-01 2 views
0

Ich habe ein mehrdimensionales Array:Php, neuen Array auf Basis von Wert für fehlende Schlüssel

$array = array(
    array(
     "name" => "one", 
     "date" => "2016-10-10", 
     "data"=> 30 
    ), 
    array(
     "name" => "one", 
     "date" => "2016-10-11", 
     "data"=> 30 
    ), 
    array(
     "name" => "two", 
     "date" => "2016-10-10", 
     "data"=> 40 
    ) 
); 

Jetzt habe ich den Unterschied zwischen Arrays zusammenführen möge, wie wenn ein Array (name => ein) zwei hat Daten (2016-10-10 und 2016-10-10) aber Array (Name => zwei) hat nur ein Datum (2016-10-10), ich möchte 2016-10-11 mit Array hinzufügen (name => zwei).

+0

Es tut mir leid Ich verstehe nicht, was Sie fragen? –

+0

Es schwierig, auszudrücken, was ich wirklich will :) in Kürze eigentlich möchte ich Array hinzufügen ( "name" => "zwei", "date" => "2016-10-11", "data" = > 0 ) dies. –

+0

Array "Name" => "zwei", nicht das Datum 2016-10-11 wie Array "Name" => "eins" haben, möchte ich nur das hinzufügen. –

Antwort

1

Es mag einen einfacheren Weg geben, an den ich nicht gedacht habe, aber ich denke, es sieht so aus, als ob die Lösung drei Schritte benötigt.

  1. Gruppe Ihre Werte von Datum

    foreach ($array as $row) { 
        $dates[$row['date']][$row['name']] = $row['data']; 
    } 
    
  2. Erhalten Sie eine einzigartige Liste aller

    $names = array_unique(array_column($array, 'name')); 
    
  3. Iterate das Datum Gruppen-Namen und die fehlende Werte in Ihre ursprüngliche Array füllen.

    foreach ($dates as $date => $date_names) { 
        foreach ($names as $name) { 
         if (!isset($date_names[$name])) { 
          $array[] = ['name' => $name, 'date' => $date, 'data' => 0]; 
         } 
        } 
    } 
    

(Dies sollte auch die gleiche Arbeit, wenn Sie Gruppe von Namen und eine eindeutige Liste der Daten erhalten.)

+0

Das ist perfekt. :) Vielen Dank. –

+0

Gern geschehen. –

Verwandte Themen