在array_walk回调中使用数组参数

时间:2016-08-07 02:07:03

标签: php

我有一个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

1 个答案:

答案 0 :(得分:1)

alterArray中的每个项目都是一个数组,您显然会尝试将其强制转换为字符串,这会引发错误(仅var_dump中的$item alterArray才能看到它为自己)。你想要什么:

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