Tengo problemas para acceder al primer índice de una matriz asociativa al analizar desde un csv.
CSV:
ID,COLOR 1,Red 2,Green 3,BluePHP:
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); Ahora $colors devuelve:
[ [ "ID" => "1", "COLOR" => "Red", ], [ "ID" => "2", "COLOR" => "Green ", ], [ "ID" => "3", "COLOR" => "Blue", ], ]; Pero si trato de acceder a la ID de cualquier color:
$colors[0]["ID"] // returns undefined index: ID $colors[0]["COLOR"] // returns "Red" Si recorro los colores, puedo acceder a la ID de esta manera:
foreach($colors as $color) { print_r(reset($color)); // Prints the ID } Pero, ¿por qué no puedo acceder a él directamente como $colors[0]["ID"] ?
Gracias
Tuve el mismo problema. El problema era que Excel agregaba un carácter oculto a la primera celda del documento, para codificar UTF-8 BOM.
Pude ver esto cuando se ejecuta:
var_dump(json_encode($array));Esto devolvería:
string(312) "[{"\ufeffemail":"test@me.com","firstName":"import","lastName":"test"},{"\ufeffemail":"test@comcast.net","firstName":"import","lastName":"test"}]"Para eliminar el carácter \ufeff, lo hice:
$header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);En este caso, sería:
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; }