【问题标题】:making associative array - array_combine() expects parameter 1 to be array, string given [duplicate]制作关联数组 - array_combine() 期望参数 1 是数组,给定字符串 [重复]
【发布时间】:2019-04-02 06:37:54
【问题描述】:

我正在尝试创建一个关联数组,其中第一个元素将代表标题。

我要取这个数组:

Array
(
    [0] => Name,Phone number
    [1] => John,555666123
    [2] => Bobby McQueen, 556699887
)

并把它变成这个数组:

Array
(
    [0] => Array
        (
            [Name] => John
            [Phone number] => 555666123
        )

    [1] => Array
        (
            [Name] => Bobby McQueen
            [Phone number] => 556699887
        )
)

这是我的代码

$assoc_array = array();
$my_array = explode("\n", file_get_contents($file->getPathName()));

$header = array_shift($my_array);


foreach ($my_array as $row) {
  $assoc_array[] = array_combine($header, $row);
}

但我收到错误:

array_combine() 期望参数 1 是数组,给定字符串

【问题讨论】:

  • 用逗号分解$header。还有$row。或移至fgetcsv
  • 所以,这是来自 csv 文件,是吗?
  • @mickmackusa 是的,这是正确的
  • 你见过这个小家伙吗:php.net/manual/en/function.fgetcsv.php
  • 是的,但我正在尝试自己创建它

标签: php arrays


【解决方案1】:
$assoc_array = array();
$my_array = explode("\n", file_get_contents($file->getPathName()));

$header = array_shift($my_array);
// $header is a string now "Name,Phone number"
// make it array:
$header = explode(",", $header);

foreach ($my_array as $row) {
  // $row is a string too, and should be exploded
  $assoc_array[] = array_combine($header, explode(',', $row));
}

但正如 cmets 中已经提到的 - 使用 fgetcsv,它具有您当前代码未实现的一些功能。它还减少了代码行数。

【讨论】:

    【解决方案2】:

    您需要 explode() $header$row 两者都由 , 提供

    $header = explode(',',array_shift($my_array));//convert header into array
    
    
    foreach ($my_array as $row) {
      //combine header and $row which also become an array after explode()
      $assoc_array[] = array_combine($header, explode(','$row));
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2017-07-12
      • 2019-09-05
      • 2020-01-27
      • 2021-01-13
      • 2015-07-12
      • 2016-04-30
      • 2014-12-09
      相关资源
      最近更新 更多