制作关联数组 - array_combine()期望参数1为数组,给定[duplicate]字符串

This question already has an answer here:

I am trying to create an associative array where the first element will represent the headers.

I would like to take this array:

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

And turn it into this array:

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

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

Here is my code

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

$header = array_shift($my_array);


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

But I am getting error:

array_combine() expects parameter 1 to be array, string given

</div>

You need to explode() $header and $row both by ,

$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));
}
$assoc_array = array();
$my_array = explode("
", 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));
}

But as already mentioned in comments - use fgetcsv, it has some features that your current code does not implement. It also reduces lines of code.