Добрый день! Я новичок в PHP, это мой первый проект. Стоит задача распознать CSV файл в ассоциированный массив с заголовками в качестве ключей. В целом, я это сделал, но столкнулся с проблемой: почему-то не определяется значение первого столбца! Точнее определяется, но как-то не нормально.. При попытке использовать первое поле id в качестве ключей - получаются индексы, а не значения Id. Для остальных полей нормально подставляются значения.. Я уже всю голову сломал - от чего такое может быть и как это победить?? Ниже привожу код: PHP: $options = array( /* Настройки CSV */ 'filename' => 'file2.csv', // Имя файла CSV. 'delimiter' => ';', // Какой разделитель используется ); function csv_to_array($filename) { if(!file_exists($filename) || !is_readable($filename)){ return FALSE; } global $options; $header = NULL; $data = array(); if (($handle = fopen($filename, 'r')) !== FALSE) { while (($row = fgetcsv($handle, 1000, $options['delimiter'])) !== FALSE) { if(!$header) //первая строка идет в заголовки $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } $data=csv_to_array($options['filename']); //запускам распознавание //вот эта конструкция показывает что все читается отлично foreach ($data as $strd){ foreach ($strd as $key=>$value){ echo "{$key} - {$value}<br>"; } } //теперь попробуем сформировать выборку по полю: $dataid=array_column($data, 'price','id'); // - идут порядковые номера а не значения!!!! Почему?? //$dataid=array_column($data, 'price','description'); // А вот так работает! И с другими полями в качестве ключей тоже работает! Почему?? var_dump($dataid); Вывод ECHO: Спойлер: вывод Echo id - 121 name_group - Раз name - gjgkfd price - 33244 remainder - #2df; description - dasd112 id - 132 name_group - два name - gjgkfd price - 33244 remainder - #2df; description - dasd113 id - 144 name_group - Раз name - gjgkfd price - 33244 remainder - #2df; description - dasd114 id - 125 name_group - два name - gjgkfd price - 33244 remainder - #2df; description - dasd115 id - 156 name_group - Раз name - gjgkfd price - 33244 remainder - #2df; description - dasd116 id - 176 name_group - два name - gjgkfd price - 33244 remainder - #2df; description - dasd117 id - 148 name_group - Раз name - gjgkfd price - 33244 remainder - #2df; description - dasd118 id - 169 name_group - два name - gjgkfd price - 33244 remainder - #2df; description - dasd119 id - 270 name_group - Раз name - gjgkfd price - 33244 remainder - #2df; description - dasd120 id - 271 name_group - два name - gjgkfd price - 33244 remainder - #2df; description - dasd121 вывод var_dump : Спойлер: сортируем по id array(10) { [0]=> string(5) "33244" [1]=> string(5) "33244" [2]=> string(5) "33244" [3]=> string(5) "33244" [4]=> string(5) "33244" [5]=> string(5) "33244" [6]=> string(5) "33244" [7]=> string(5) "33244" [8]=> string(5) "33244" [9]=> string(5) "33244" } Спойлер: сортируем по description array(10) { ["dasd112"]=> string(5) "33244" ["dasd113"]=> string(5) "33244" ["dasd114"]=> string(5) "33244" ["dasd115"]=> string(5) "33244" ["dasd116"]=> string(5) "33244" ["dasd117"]=> string(5) "33244" ["dasd118"]=> string(5) "33244" ["dasd119"]=> string(5) "33244" ["dasd120"]=> string(5) "33244" ["dasd121"]=> string(5) "33244" } Если использовать id не как ключ, а как значения, то вообще получается пустой массив.., т.е. id почему-то присваиваются NULL - но ведь в выводе через echo - все нормально! CSV тут прикрепить нельзя, содержимое под спойлером: Спойлер: CSV file2.csv Код (Text): id;name_group;name;price;remainder;description 121;Раз;gjgkfd;33244;"#2df;";dasd112 132;два;gjgkfd;33244;"#2df;";dasd113 144;Раз;gjgkfd;33244;"#2df;";dasd114 125;два;gjgkfd;33244;"#2df;";dasd115 156;Раз;gjgkfd;33244;"#2df;";dasd116 176;два;gjgkfd;33244;"#2df;";dasd117 148;Раз;gjgkfd;33244;"#2df;";dasd118 169;два;gjgkfd;33244;"#2df;";dasd119 270;Раз;gjgkfd;33244;"#2df;";dasd120 271;два;gjgkfd;33244;"#2df;";dasd121 Помогите разобраться, что ему надо ((
Попробовал на другом файле - все тоже самое, первый столбец при обращении к массиву читается как NULL. Т.е. если в примере из первого сообщения выполнить в конце строчку: $dataid=array_column($data,'id','price'); var_dump($dataid); - будет выведен пустой массив - и так с любым содержимом CSV для первого столбца - почему? как это обойти? Блин, я уже не знаю что делать, уперся в это - подскажите пожалуйста.
Всем спасибо за ответы, разобрался сам. Дело в кодировке CSV - нужно чтобы кодировка была utf8 - без BOM Вроде есть способы убрать этот BOM в коде, но мне было проще поменять кодировку файла.