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);