2016-08-07 14 views
1

Ich habe eine CSV-Datei. Die erste Zeile enthält Kopfzeileninformationen.Verwenden von Array-Parameter in Array_walk Callback

Unten ist ein Auszug der Datei (Kommentare hinzugefügt).

Name, City, State, Country // header line 
Tom, Jackson, Mississippi, United States // line 1 
Simon, Temple, Pennsylvania, United States // line 2... etc... 

Ich bin Parsen diese CSV in ein Array mit array_map:

// parse CSV file into an array 
$fileArray = array_map('str_getcsv', file($file["tmp_name"])); 

die mir die gibt folgende:

array(3) { 
    [0] => array(4) { 
    [0] => string(4) "Name" 
    [1]=> string(4) "City" 
    [2]=> string(5) "State" 
    [3]=> string(6) "Country" 
    } 
    [1] => array(4) { 
    [0] => string(4) "Tom" 
    [1]=> string(7) "Jackson" 
    [2]=> string(11) "Mississippi" 
    [3]=> string(13) "United States" 
    } 
    [2] => array(4) { 
    [0] => string(5) "Simon" 
    [1]=> string(6) "Temple" 
    [2]=> string(12) "Pennsylvania" 
    [3]=> string(13) "United States" 
    } 

Ich versuche, die Array-Taste neu zuordnen/Wertpaare, so dass der Schlüssel das entsprechende Kopfzeilenfeld referenziert. So zum Beispiel:

array(3) { 
    [0] => array(4) { 
    ['Name'] => string(4) "Name" 
    ['City']=> string(4) "City" 
    ['State']=> string(5) "State" 
    ['Country']=> string(6) "Country" 
    } 
    [1] => array(4) { 
    ['Name'] => string(4) "Tom" 
    ['City']=> string(7) "Jackson" 
    ['State']=> string(11) "Mississippi" 
    ['Country']=> string(13) "United States" 
    } 
    [2] => array(4) { 
    ['Name'] => string(5) "Simon" 
    ['City']=> string(6) "Temple" 
    ['State']=> string(12) "Pennsylvania" 
    ['Country']=> string(13) "United States" 
    } 

Ich array_walk mit dem Array mit einer Callback-Funktion zu ändern, aber es scheint, dass array_walk Problemen bei der Verarbeitung als dritte Argument ist ein Array mit.

// parse CSV file into an array 
$fileArray = array_map('str_getcsv', file($file["tmp_name"])); 

// header line 
$header = $fileArray[0]; // header[0] = "[0]=>Name, [1]=>City... etc" 

/* alterArray 
* Update the array to key/value 
*/ 
function alterArray(&$item, $key, $prefix) { 
    $item = "${prefix}[${key}]}: ${item}"; 
} 

// use array_walks to 
array_walk($fileArray, 'alterArray', $header); 

// print result 
print_r($fileArray); 

Ich erhalte diese Fehlermeldung:

Notice: Array to string conversion

Antwort

1

Jedes Element in alterArray ist ein Array, und Sie natürlich versuchen, es zu Zeichenfolge zu werfen, die den Fehler wirft (nur var_dump$item in alterArray um es selbst zu sehen). Was Sie wollen:

function alterArray(&$item, $key, $header) { 
    $item = array_combine($header, $item); 
} 
array_walk($fileArray, 'alterArray', $header); 
Verwandte Themen