2016-10-11 2 views
0

У меня есть простой PHP скрипт, который читает файл CSV и создает массив из этого:PHP чтения CSV и игнорировать определенные столбцы

<?php 
$file = fopen('food.csv', 'r'); 
$allfile = []; 
$idsColumnsWanted = array(0,1,16); 
while (($line = fgetcsv($file)) !== FALSE) { 

    $i = 0; 

    foreach ($line as $i => $cell) { 
     if (!in_array($i, $idsColumnsWanted)) { 
      continue; 
     } 
     $allfile[] = $line; 
     $i++; 
    } 

} 
fclose($file); 
?> 

Я хотел бы, чтобы отобразить только данные в столбцах 0, 1 & 16.

Я сделал попытку выше, но он все еще выводит весь CSV.

+0

При попытке отображения вы можете отфильтровать – Netham

+0

, я думаю, вы хотите проверить ключ вместо значения, 'in_array()' проверяет значение, 'array_key_exists()' проверяет ключ – Neat

+0

У вас нет для увеличения переменной «i». –

ответ

1

Вы можете сделать это с array_intersect_key:

$file = fopen('food.csv', 'r'); 
$allfile = []; 

$idsColumnsWanted = array_flip([0, 1, 16]); 

while (false !== $fields = fgetcsv($file)) { 
    $allfile[] = array_intersect_key($fields, $idsColumnsWanted); 
} 

fclose($file); 

Примечание: если вы не хотите, чтобы сохранить номера столбцов в качестве ключей в результирующий массив, используйте array_values(array_intersect_key(...)).

+0

Когда я запускаю это, мой массив заполняется элементами 'null'. Как мне разрешить? – michaelmcgurk

+1

@michaelmcgurk: действительно? Я сделаю несколько тестов. –

+1

@michaelmcgurk: «s» отсутствовал в «$ id ** s ** ColumnsWanted» –