2016-04-17 20 views
2

So schreibe ich eine einfache Export-CSV-Funktion in PHP, aber ich habe ein bisschen ein Problem, wenn es um Header und Array für Werte kommt.neues Array mit nur Werten in PHP

Ich habe ein Preset Array von welchen Spalten der Benutzer exportieren kann, die $exportHeaders ist. Also, was ich versuche zu tun, anstatt jeden Wert für $row['value for column'] einzugeben, möchte ich einen Weg schaffen, ein neues Array anstelle von $row Abschnitt einfügen zu machen. Allerdings, wenn ich ein neues Array zu machen, die $newExportHeader[] in meinem Fall ist, habe ich am Ende mit einem Array auf, die (mit Schlüsseln und Wert) wie folgt aussieht:

$newExportHeader = array(
0 => $row['first_name'], 
1 => $row['last_name'], 
2 => $row['email'], 
); 

Aber ich brauche ein Array, das keine hat Schlüssel damit verbunden. Also meine Frage ist: Gibt es eine Möglichkeit, ein Array on the fly ohne Schlüssel darin zu machen, nur Werte

protected $exportHeaders = array(
    "first_name", "last_name", "email", "street", "city", "province", "postal_code", "phone_1", 
    "phone_2", "created_at", "updated_at" 

); 

Das derzeit arbeitet:

foreach ($this->user->clients()->get() as $row) { 
      fputcsv($handle, array(row['first_name'], row['last_name'], row['email'])); 
     } 

Eine der Optionen, die ich war Herumspielen mit - funktioniert nicht:

foreach ($this->user->clients()->get() as $row) { 
     foreach ($this->exportHeaders as $header) { 
       $newExportHeader[] = $row[$header]; <-Problem Area 
      } 
      fputcsv($handle, array_values($newExportHeader)); 
     } 

Jede Hilfe wird geschätzt.

+1

Ein Array ohne Schlüssel, Doh !! Was ist das? Ich denke, Sie könnten es eine Komma-getrennte Zeichenfolge nennen – RiggsFolly

+0

PHP erlaubt keine Arrays ohne Schlüssel. Wenn Sie ein Array "ohne Schlüssel" erstellen, wie dieses $ foo = array ("eins", "zwei", "drei"); ', wird PHP es automatisch indizieren, so dass $ foo [0] ===" ein "'. Daher ist ein Array "ohne Schlüssel" dasselbe wie ein indiziertes Array, das bei 0 beginnt. – mkasberg

Antwort

1

Basierend auf Ihren Arbeitscode und erraten, was Sie auf der Grundlage Ihrer nicht-funktionierenden Code gehen,

Versuchen Sie folgendes:

foreach ($this->user->clients()->get() as $row) { 
    $transformedRow = array(); // Create a new array for the row, based on new headers. 
    foreach($this->exportHeaders as $header) { 
     $transformedRow[] = row[$header]; // Add to the new array for the row in the correct order. 
    } 
    fputcsv($handle, $transformedRow); // Add row to the csv 
} 

In Ihrem ursprünglichen Code, Sie scheinen ein haben Problem, dass Sie $newExportHeader nicht jede Iteration der äußeren Schleife neu initialisieren.

+0

Sie sind ein Lebensretter! Vielen Dank. Lief wie am Schnürchen. Ich habe meinen Kopf 2 Tage lang gegen den Schreibtisch geschlagen. Dies wird den wiederholten Code in anderen Teilen des Programms speichern. – max234435

Verwandte Themen