PHP: как отправить тем же запросом остаток массива, который не попадает в условие?

Уважаемые эксперты!

Читаю таблицу csv, информацию кладу в массив $temp_array, в котором она каждый раз накапливается до достижения условия if($stop%100 == 0 || $stop == 44768). "$stop == 44768", конечно, не вариант, потому что набор данных может быть другим. А как сделать так, чтобы не попавшие в условие 68 записей таки были отправлены тем же запросом? Нужно каким-то образом отправить остаток документа, который не попадает в первое условие.. $stop%100 == 0. Буду благодарен за любой совет и помощь..

if (($handle = fopen( 'VED2017.csv', 'r' )) !== false) {
fgetcsv($handle, 1000, ";");
while (($data = fgetcsv($handle, 1000, ";")) !== false) {
      $a = empty(trim($data[6])) ? 0 : 1;
      $w = empty(trim($data[7])) ? 0 : 1;
      $v = empty(trim($data[8])) ? 0 : 1;
      $g = empty(trim($data[9])) ? 0 : 1;
        $temp_array[] = "(" . 2020 . ", '$a', '$w', '$v', '$g', '" . trim($data[6]) . "', '" . trim($data[7]) . "', '" . trim($data[8]) . "', '" . trim($data[9]) . "', '" . trim($data[0]) . "', '" . trim($data[5]) . "'," . 0 . ", '" . trim($data[1]) . "')";



        if($stop%100 == 0 || $stop == 44768){
            $query =
                "INSERT INTO namebase.nametable
                (year,is_sender,is_receiver,is_holder,is_declarant,sender,receiver,holder,declarant,_sys_number,_key,_status,inn)
            VALUES " . implode(",", $temp_array);

            if ( !$b->Query( $query ) )
            {
                print("ERROR CONNECT SQL");
                exit;
            }

            $temp_array = array();

        }
$stop++;
    }
    fclose($handle);
}

Ответы (1 шт):

Автор решения: u_mulder

Схематично это выглядит так:

$temp_array = array();
while (($data = fgetcsv($handle, 1000, ";")) !== false) {
  $a = empty(trim($data[6])) ? 0 : 1;
  $w = empty(trim($data[7])) ? 0 : 1;
  $v = empty(trim($data[8])) ? 0 : 1;
  $g = empty(trim($data[9])) ? 0 : 1;
  $temp_array[] = "(" . 2020 . ", '$a', '$w', '$v', '$g', '" . trim($data[6]) . "', '" . trim($data[7]) . "', '" . trim($data[8]) . "', '" . trim($data[9]) . "', '" . trim($data[0]) . "', '" . trim($data[5]) . "'," . 0 . ", '" . trim($data[1]) . "')";

  if(100 === \count($temp_array)) {
    // делаем INSERT-запрос

    $temp_array = array();
  }
}
fclose($handle);
if ($temp_array) {
    // делаем INSERT-запрос, точно такой же что и в цикле
}

Попытка два:

$temp_array = array();
// Тут мы учитываем ОБА случая - и когда нам 
// вернули следующую запись и когда НЕ вернули
while (($data = fgetcsv($handle, 1000, ";")) !== false || ($data = fgetcsv($handle, 1000, ";")) === false) {
    if (false !== $data) {
        $a = empty(trim($data[6])) ? 0 : 1;
        $w = empty(trim($data[7])) ? 0 : 1;
        $v = empty(trim($data[8])) ? 0 : 1;
        $g = empty(trim($data[9])) ? 0 : 1;
        $temp_array[] = "(" . 2020 . ", '$a', '$w', '$v', '$g', '" . trim($data[6]) . "', '" . trim($data[7]) . "', '" . trim($data[8]) . "', '" . trim($data[9]) . "', '" . trim($data[0]) . "', '" . trim($data[5]) . "'," . 0 . ", '" . trim($data[1]) . "')";
    }

    // набрали сто записей или следующей записи нет
    if(100 === \count($temp_array) || $data === false) {
       // делаем INSERT-запрос

        $temp_array = array();
    }
    
    // чтобы цикл не бегал вечно - делаем `break`
    if ($data === false) {
        break;
    }
}
fclose($handle);
→ Ссылка