2016-05-09 12 views
0

Ich habe ein Array (Daten aus einer Excel-Datei bekommen), die ich habe versucht, zu „verschmelzen“ die Daten auf der ID abhängig. Ich habe es geschafft, das Array zu erstellen (Gruppierung der Produkte zu der ID), was zu Folgendem führt.Print Array Key Multidimensional innerhalb eines Foreach

Array ([Order10] => Array ([Mr Name] => Array ([45 STREET] => Array ([AREA] => Array ([Product1] => 1 [Product2] => 3))))) 

ich jetzt versuchen, extrahiert die Daten zu erhalten (Order, Name, Straße etc.), aber leite nur die ID (Order10) mit Schlüssel (var) zu extrahieren. Hier ist ein grundlegendes Layout, wie der Code derzeit aussieht.

//Gets Data from excel file 
foreach ($bulk as $prod) 
{ 
    $APIOrder[] = array('Order' => $prod['ORDER'], 
         'Prod' => $prod['PROD'], 
         'Quantity' => $prod['QTY'], 
         'Recipient_Name' => $prod['RECIPIENT_NAME']); 
} 

$newOptions = array(); 
foreach ($APIOrder as $option) 
{ 
    $Order = $option['Order']; 
    $Prod = $option['Prod']; 
    $Qty = $option['Quantity']; //Added 
    $Recipient_Name = $option['Recipient_Name']; 
    $newOptions[$Order][$Recipient_Name][$Prod] = $Qty; 
} 

$index4 = 0; 

foreach($newOptions as $key=>$val) 
{ 
    $SeperateOptions = (array_slice($newOptions, $index4, true)); 
    //Print Array to check, Echo ID, Name, Product 
    $index4++; 
} 

Ich kann diese Daten extrahiert, wenn ich innerhalb einer foreach-Schleife den Code nicht haben. Das Problem dabei ist die Reihenfolge wiederholt wird, je nachdem, wie viele Produkte in einer Größenordnung, die die Reihenfolge in ein Datenbanksystem abit erschwert das Einfügen. Unten Beispiel:

Array ([Order10] => Array ([Mr Name] => Array ([45 STREET] => Array ([AREA] => Array ([Product1] => 1))))) 
Array ([Order10] => Array ([Mr Name] => Array ([45 STREET] => Array ([AREA] => Array ([Product2] => 3))))) 

Wie ich gesagt habe, kann ich die Daten extrahieren, wenn ich nicht versuchen, alle Produkte innerhalb des Arrays zu setzen, aber dann würde ich muss eine Schleife erstellen, wenn die Daten gesendet werden die Datenbank, um die fehlenden Produkte hinzuzufügen. Jede Art von Richtung würde geschätzt werden. Diese

+0

Sie können dies nicht tun. In PHP sollten die Array-Schlüssel eindeutig sein und dürfen nur eine Zeichenfolge oder eine ganze Zahl sein. Ihr vorhandenes Array ist gut. – vaso123

+0

@lolka_bolka Danke für die Antwort, halten, so dass es mit dem einem Array (mit mulitple Produkten). Wie würde ich die Schlüsselnamen wie Adresse "extrahieren"? Dies ist ein Problem, das ich mit meinem derzeitigen Weg habe. – Jake

+0

Siehe meine "Antwort" – vaso123

Antwort

0

ist nicht wirklich eine Antwort, aber basierend auf Kommentare zwischen OP und ich, ich versuche, ihm zu zeigen, wie ich das tun und es ist zu lang, und hier sind Code-Formatierung. Der Schlüssel ist die ID der Reihenfolge, alles in einem Array, was mehr als 1 Wert hat. products ist auch ein Array. Versuchen Sie immer halten ähnliche Dinge eingeschlossen .:

$orders = [ 
    'Order10' => [ 
     'name' => 'Mr Name', 
     'address' => [ 
      'street' => 'street here', 
      'country' => 'country here', 
      'zipcode' => 'zipcode here' 
     ], 
     'phones' => [ 
      'mobile' => 'mobile phone here', 
      'fax' => 'fax here', 
      'workplace' => 'here' 
     ], 
     'products' => [ 
      'productId1', 
      'productId2', 
      //and so on 
     ] 
    ] 
]; 

und dann können Sie Ihre Bestellung Array iterieren wie diese zeigen:

foreach ($orders as $order) { 
     ?> 
     <div>Name: <?php echo $order['name']; ?></div> 
     <div>Address: <?php echo $order['address']['zipcode']; ?>, <?php echo $order['address']['country']; ?>, <?php echo $order['address']['street']; ?> </div> 
     <div>Products: 
      <?php 
      foreach ($order['products'] as $procutId) { 
       $Produt = new Procut($productId); 
       ?> 
       <div><?php echo $Product->getName(); ?></div> 
       <?php 
      } 
      ?> 
     </div> 
     <hr> 
     <?php 
    } 
} 
?> 

In meinem Beispiel habe ich eine Product Klasse, vielleicht sind Sie nicht verwenden Klassen, aber natürlich können Sie eine getProcut($id) Funktion erstellen Sie ein Produkt von id zu bekommen, so könnte es

$product = getProduct($procutId); 
echo $product['name']; 

Das ist Ihre Entscheidung.

+0

Thanks again @lolka_bolka. Die Produktklasse wird nicht wirklich benötigt, da sie Befehle aus einer Excel-Datei liest (ich verwende Klassen für andere). Ich werde in Ihr Beispiel schauen und versuchen, es anzupassen. Danke nochmal für die Hilfe! – Jake