我有一个CSV文件。第一行包含标题信息。
以下是该文件的摘录(已添加评论)。
Name, City, State, Country // header line
Tom, Jackson, Mississippi, United States // line 1
Simon, Temple, Pennsylvania, United States // line 2... etc...
我正在使用array_map将此CSV解析为数组:
// parse CSV file into an array
$fileArray = array_map('str_getcsv', file($file["tmp_name"]));
这给了我以下内容:
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"
}
我正在尝试将数组重新映射到键/值对,以便键将引用相应的标题字段。例如:
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"
}
我正在使用array_walk通过回调函数来改变数组,但似乎array_walk在处理数组时遇到了问题,因为它是第3个参数。
// 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);
我收到了这个错误:
Notice: Array to string conversion
答案 0 :(得分:1)
alterArray
中的每个项目都是一个数组,您显然会尝试将其强制转换为字符串,这会引发错误(仅var_dump
中的$item
alterArray
才能看到它为自己)。你想要什么:
function alterArray(&$item, $key, $header) {
$item = array_combine($header, $item);
}
array_walk($fileArray, 'alterArray', $header);