Если выписка внутри Foreach PHP - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть код, который извлекает массив из TXT-файла, он удаляет ненужные мне столбцы и вставляет его в CSV-файл.

Используемый мной код удаляет столбцы, но я хотите, чтобы он проверял два столбца, если один пустой, затем удалите его и используйте следующий столбец.

Он не цикличен для каждой строки в зависимости от того, пуст столбец 12 или нет, в основном он просто выполняет оператор if один раз для первой строки и применяет его к каждой строке.

while ($data = fgetcsv($f_in, 8000, "|")) {
    $columns = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of columns
    if (empty($columns['12'])) {
        $unwanted = [1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of unwanted columns
        foreach($unwanted as $i) {
            unset($data[$i]);
        }
    } else {
        $unwanted = [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]; //index of unwanted columns
        foreach($unwanted as $i) {
            unset($data[$i]);
        }
    }
    fputcsv($f_out, $data, ',', '"');

Я получаю те же результаты, не зацикливаясь для каждой строки.


    if ($columns['12'] > 0) 

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2020

Это более чистое решение вашей проблемы: вы в основном хотите иметь два элемента в результирующей базе пустот csv 13-го столбца каждой строки ($ data [12] указывает на столбец 13 как счетчик начала массива из элемента 0 ).

, поэтому вам не нужно делать все циклы, просто создайте нужный вам массив из двух элементов массива и выведите их sh.

while ($data = fgetcsv($f_in, 8000, "|")) {
    if (empty($data[12])) {
        $result = [$data[0],$data[13]];
    } else {
        $result = [$data[0],$data[12]];
    }
    fputcsv($f_out, $result, ',', '"');

ps, если вы просчитались сами и фактически не хотел, чтобы первый столбец исходного индекса проверял индексы и удалял $ data [0] из массива $ result.

, вы также можете написать его так, как вам хочется:)

while ($data = fgetcsv($f_in, 8000, "|")) {

    $result = empty($data[12]) ? [$data[0],$data[13]] : [$data[0],$data[12]]; 

    fputcsv($f_out, $result, ',', '"');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...