2016-07-02 7 views
0

Wie kann ich gehen über diese Ergebnisse in eine Datenbank als ein Datensatz für jeden Schlüsselnamen einfügen? Diese 2 Arrays haben immer die gleiche Anzahl von Datensätzen und Schlüsselnamen.php Schleife durch mehrere Arrays mit dem gleichen Schlüssel

[size_chart_data] =Array (
    [Width] =Array (
     [Small] =18 
     [Medium] =20 
     [Large] =22 
     [X-Large] =24 
     [2X-Large] =26 
     [3X-Large] =28 
     [4X-Large] =30 
     [5X-Large] =32 
    ) 
    [Height] =Array (
     [Small] =28 
     [Medium] =29 
     [Large] =30 
     [X-Large] =31 
     [2X-Large] =32 
     [3X-Large] =33 
     [4X-Large] =34 
     [5X-Large] =35 
    ) 
) 

Ich verwende die folgende SQL in die Datenbank einzufügen:

$chartData = db_insert('pa_size_chart_data') 
    ->fields(array(
     'width', 
     'height', 
    )); 

Vielen Dank für Ihre Zeit. Bitte lassen Sie mich wissen, wenn etwas geklärt werden muss. Aaron

+0

Was ist 'size_id'? –

+0

size_id ist für diese Frage unwichtig und ich habe die Frage bearbeitet. Entschuldigung für die Verwirrung. –

Antwort

0

Dies ist die Antwort. Ganz besonders danke @u_mulder und @blackandorangecat für all deine hilfreichen Gedanken !!! In der Frage habe ich nur Breite und Höhe einbezogen. Aber ich fühlte, dass es für andere hilfreicher sein könnte, wenn ich eine 3. Ebene mit einschloss. Also die Antwort enthält Breite, Höhe, & Ärmel.

$size_chart_data = array(); 
    foreach ($size_chart_data['Width'] as $key => $value) { 
     // floatval() is changing string results to float 
     $value = floatval($value); 

     if (!empty($size_chart_data['Height']) && !empty($size_chart_data['Sleeve'])) { 
     // floatval() is changing string results to float 
     $size_chart_data['Height'][$key] = floatval($size_chart_data['Height'][$key]); 
     $size_chart_data['Sleeve'][$key] = floatval($size_chart_data['Sleeve'][$key]); 
     $db_data = array(
      'width' => $value,        // this is width 
      'height' => $size_chart_data['Height'][$key], // this is height 
      'sleeve' => $size_chart_data['Sleeve'][$key], // this is the sleeve 
     ); 
     } elseif (!empty($size_chart_data['Height'])) { 
     $size_chart_data['Height'][$key] = floatval($size_chart_data['Height'][$key]); 
     $db_data = array(
      'width' => $value,        // this is width 
      'height' => $size_chart_data['Height'][$key], // this is height 
      'sleeve' => null,        // this is the sleeve 
     ); 
     } elseif (!empty($size_chart_data['Width'])){ 
     $db_data = array(
      'width' => $value, // this is width 
      'height' => null, // this is height 
      'sleeve' => null, // this is the sleeve 
     ); 
     }    
     $sizeArr = array($db_data); 
     $chartData = db_insert('pa_size_chart_data') 
      ->fields(array(
      'width', 
      'height', 
      'sleeve', 
     )); 
     foreach ($sizeArr as $sizeRec) { 
      $chartData->values($sizeRec); 
     } 
     $chartData->execute(); 
    } 
0

Ich nehme an, Sie sollten dies tun:

$size_chart_data = array(); 
foreach ($size_chart_data['Width'] as $key => $value) { 
    $db_data = array(); 
    if (!empty($size_chart_data['Height'][$key])) { 
     $db_data = array(
      'size_id' => $key,        // this is size_id 
      'width' => $value,        // this is width 
      'height' => $size_chart_data['Height'][$key], // this is height 
     ); 
     // check what you've got 
     print_r($db_data); 
     // add $db_data to database, I suppose it's like 
     $chartData = db_insert('pa_size_chart_data') 
      ->fields($db_data); 
    } 
} 
+0

Danke U_Mulder! Es setzt die Daten in eine Reihenfolge, die nutzbar sein wird. Aus irgendeinem Grund werden die Daten nicht in die Datenbank eingefügt. Ich werde mehr Nachforschungen anstellen und hoffentlich in der Lage sein, es herauszufinden. –

+0

Vielleicht ist es nicht verwendbar, weil es ein mehrdimensionales Array ist? @Aaronb – blackandorangecat

+0

'$ singleArray = call_user_func_array ('array_merge', $ multiArray);' @aaronb dies wird das Array abflachen. Sie könnten dies vor dem Einfügen in die db versuchen – blackandorangecat