【问题标题】:Using array param in array_walk callback在 array_walk 回调中使用数组参数
【发布时间】:2016-08-07 02:07:02
【问题描述】:

我有一个 CSV 文件。第一行包含标题信息。

以下是文件的摘录(添加了 cmets)。

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 在处理数组作为第三个参数时遇到问题。

// 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

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      相关资源
      最近更新 更多