Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

215
Vistas
First key of php associative array returns undefined index when parsed from CSV

I am having trouble accessing the first index of an associative array when parsing from a csv.

CSV:

ID,COLOR
1,Red
2,Green 
3,Blue

PHP:

function associative_array_from_csv($csv)
{
    $rows   = array_map('str_getcsv', file($csv));
    $header = array_shift($rows);
    $array  = array();

    foreach($rows as $data) {
        $array[] = array_combine($header, $data);
    }

    return $array;
}

$colors = associative_array_from_csv($csv);

Now $colors returns:

[
    [
        "ID"    => "1",
        "COLOR" => "Red",
    ],
    [
        "ID"    => "2",
        "COLOR" => "Green ",
    ],
    [
        "ID"    => "3",
        "COLOR" => "Blue",
    ],
];

But if I try to access the ID of any color:

$colors[0]["ID"]    // returns undefined index: ID
$colors[0]["COLOR"] // returns "Red"

If I loop over the colors I can access the ID like so:

foreach($colors as $color) 
{ 
    print_r(reset($color)); // Prints the ID 
}

But why I can't access it directly like $colors[0]["ID"]?

Thanks

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

I had the same issue. The problem was that Excel adds a hidden character to the first cell in the document, for encoding UTF-8 BOM.

I could see this when running:

var_dump(json_encode($array));

This would return:

string(312) "[{"\ufeffemail":"test@me.com","firstName":"import","lastName":"test"},{"\ufeffemail":"test@comcast.net","firstName":"import","lastName":"test"}]"

To remove the \ufeff character, I did:

$header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);

In this case, that would be:

function associative_array_from_csv($csv)
{
    $rows   = array_map('str_getcsv', file($csv));
    $header = array_shift($rows);
    $header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);
    $array  = array();

    foreach($rows as $data) {
        $array[] = array_combine($header, $data);
    }

    return $array;
}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda