PHP fgetcsv — пропускать столбцы?

Я пытаюсь импортировать CSV и иметь возможность удалять столбцы и импортировать только выбранные.

Итак, у меня есть массив выбранных полей и файл CSV. Я могу удалить строки, но у меня проблемы с пропуском столбцов.

Вот что я использую для отображения таблицы, просто пытаясь проверить удаление столбца. Здесь нет ничего необычного. Просто нужно знать, где размещать любые операторы if или что-то еще. Советы, предложения, образцы приветствуются!

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                        echo("<tr>\r\n");
                        foreach ($data as $index=>$val) {
                        echo("\t<td>$val</td>\r\n");
                        } 
                        echo("</tr>\r\n");
               } //end while

Где я могу разместить любой оператор if, чтобы разрешить только оставшиеся строки? я пробовал in_array, array_diff и т. д. - и ничего не работает?

Теперь, когда я печатаю это, должен ли я просто использовать PHP для удаления столбцов перед вставкой? Что было бы лучшей практикой?

спасибо Джейт


person joepwn    schedule 09.06.2012    source источник


Ответы (3)


Вы можете установить массив, содержащий столбцы для отображения (в моем примере 1 и 3), и использовать ключевую часть foreach, чтобы узнать, какой столбец вы сканируете:

<?
$handle = fopen("test.csv", "r");

$columns = array(1,3);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo("<tr>\r\n");
        foreach ($data as $index=>$val) {
                if (in_array($index+1, $columns)) {
                        echo("\t<td>$val</td>\r\n");
                }
        }
        echo("</tr>\r\n");
} //end while

?>
person dAm2K    schedule 10.06.2012
comment
Это именно то, что я искал. Спасибо. Быстрый ответ, точный. еще раз спасибо - person joepwn; 10.06.2012

Пытаться:

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    echo("<tr>\r\n");

    foreach ($data as $index=>$val) {
        if($index != BADINDEX) {
            echo("\t<td>$val</td>\r\n");
        }   
    }
    echo("</tr>\r\n");
}

Где BADINDEX — номер столбца, от которого вы хотите избавиться (первый столбец равен 0).

Поскольку то, что вы получаете от fgetcsv, является строками, а не столбцами, нужно просто отфильтровать нужный столбец для каждой напечатанной строки, что достигается путем проверки индекса в блоке foreach.

person Mahn    schedule 10.06.2012

Это старый пост, но я нашел другой способ, который может кому-то помочь:

$file = fopen($yourcsvfile, 'r');

    while (($result = fgetcsv($file, 1000, ",")) !== false)
    {
        $temp = array();
        $temp[] = $result[1]; // the column you want in your new array
        $temp[] = $result[2]; // the column you want in your new array
        $csv1[] = $temp;
    }
person Aramil    schedule 25.09.2017