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

5
  • Explode $header by comma. And $row too. Or move to fgetcsv. Commented Oct 29, 2018 at 10:38
  • So, this is coming from a csv file, yeah? Commented Oct 29, 2018 at 10:42
  • @mickmackusa yes that is correct Commented Oct 29, 2018 at 10:44
  • Have you seen this little guy: php.net/manual/en/function.fgetcsv.php ? Commented Oct 29, 2018 at 10:45
  • Yes but I am trying to create it myself Commented Oct 29, 2018 at 10:47

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

Comments

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.