Я пытаюсь создать многомерный массив в PHP, где внутренние массивы являются ассоциативными следующим примером CSV строки $ CSV:создать многомерный ассоциативный массив из CSV в PHP
# Results from 2015-06-16 to 2015-06-16.
date,time,label,artist,composer,album,title,duration
2015-06-16,12:00 AM,Island,U2,"Clayton- Adam,The Edge,Bono,Mullen- Larry- Jr",Songs Of Innocence,SONG FOR SOMEONE,03:46
2015-06-16,12:04 AM,Lowden Proud,"Fearing & White, Andy White, Stephen Fearing","White- Andy,Fearing- Stephen",Tea And Confidences,SECRET OF A LONG LASTING LOVE,03:10
2015-06-16,12:07 AM,Columbia,The Wallflowers,"Dylan- Jakob,Irons- Jack,Mathis- Stuart,Richling- Greg,Jaffee- Rami",Glad All Over,REBOOT THE MISSION,03:31
2015-06-16,12:10 AM,Distort Light,Bend Sinister,Moxon- Daniel,"Stories Of Brothers, Tales Of Lovers",JIMMY BROWN,03:48
Количества фактических строк данных следующий за 3-строчным форматом является переменной. То, что я сделал до сих пор делается простой многомерный массив:
$resultArray = str_getcsv($csv, PHP_EOL);//parse the rows
array_shift($resultArray);//shift out results first row: date info
array_shift($resultArray);//shift out results new first row: field labels
foreach($resultArray as &$row) {//parse the items in rows
$row = str_getcsv($row, ",", '"');//removes the '"' field enclosure?
}//foreach
Это делает функциональный многомерный массив, но то, что я не могу понять, как сделать внутренние массивы ассоциативные таким образом я могу получить доступ к ним с помощью текста чистые ключи из массива я ожидал с помощью:
$rowFieldKeysArray = array('date', 'time', 'label', 'artist', 'composer', 'album', 'title', 'duration');
Я уверен, что есть простой PHP способ использовать ключевое имя массив в качестве ключей для ассоциативного массива, но я не уверен, как это сделать. Я подозреваю, мне нужно что-то вдоль линий:
foreach($resultArray as $rowKey => &$row) {
$row[$rowFieldKeysArray[$rowKey]] = str_getcsv($row, ",", '"');
}//foreach
Но это дает «Warning: Illegal строка смещения„дата“[...]».
Как мне это сделать?
EDIT: на основе комбинированной информации, предоставленной ссылке в комментарии Андрея и в ответ я принял, я был в состоянии решить эту проблему, используя следующий эффективный код:
$resultArray = str_getcsv($csv, PHP_EOL);//parse the rows
array_shift($resultArray);//shift out results first row: date info
$rowFieldKeysArray = str_getcsv(array_shift($resultArray), ",");//shift out results new first row: field labels into field key name array
//array('date', 'time', 'label', 'artist', 'composer', 'album', 'title', 'duration');//array of Key field names for associative array
// [0] [1] [2] [3] [4] [5] [6] [7] //key index
foreach($resultArray as &$row) {//parse the items in rows
$row = array_combine($rowFieldKeysArray, str_getcsv($row, ",", '"'));//array_combine replaces numeric indexes with key field labels
}//foreach
Спасибо!
@ Андрей: Ваша ссылка была наиболее полезной, и я решил эту проблему, используя эту информацию. Если вы опубликуете это как ответ, я бы принял его. – BartmanEH
Пожалуйста, обратитесь к аналогичной теме: http://stackoverflow.com/questions/29711088/reading-csv-into-a-php-array/29711416#29711416 –
Невозможно опубликовать его как ответ по какой-либо причине. Все хорошо, я рад, что это помогает. –