Считайте CSV в двумерный массив, используя первую строку в качестве ключей

Я пытаюсь прочитать файл CSV, где формат:

titleA,titleB,titleC

data1A,data1B,data1C

data2A,data2B,data3C

Ожидаемый ВЫВОД:

Array
(
[0] => Array
(
[titleA] => data1A
[titleB] => data1B
[titleC] => data1C
)

[1] => Array
(
[titleA] => data2A
[titleB] => data2B
[titleC] => data2C
)

Я попытался использовать то, что нашел здесь:

if (($handle = fopen($filename, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$twoDarray[] = $data;
}
fclose($handle);
}

Но он показывает 1 массив со всеми заголовками и 2 других массива с данными.


person Federico    schedule 26.03.2018    source источник


Ответы (2)


Вы хотите прочитать первую строку и использовать ее в качестве ключей и комбинировать:

if (($handle = fopen($filename, "r")) !== FALSE) {    
    $titles = fgetcsv($handle, 1000);

    while (($data = fgetcsv($handle, 1000)) !== FALSE) {
        $twoDarray[] = array_combine($titles, $data);
    }
    fclose($handle);
}
person AbraCadaver    schedule 26.03.2018

Вы можете взять сначала заголовок, а затем объединить его с каждой строкой.

$heading = array();
$heading_check =1;
if (($handle = fopen($filename, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if($heading_check){
            $heading = $data;
            $heading_check=0;
            continue;
        }

        $twoDarray[] = array_combine($heading,$data);
    }
fclose($handle);
}
person Amitabh Joshi    schedule 26.03.2018