2

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("\n", 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

u_mulder
  • 54,101
  • 5
  • 48
  • 64
Liga
  • 3,291
  • 5
  • 34
  • 59

2 Answers2

2
$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));
}

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.

u_mulder
  • 54,101
  • 5
  • 48
  • 64
1

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));
}
Alive to die - Anant
  • 70,531
  • 10
  • 51
  • 98