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.