PHP вложен для заявлений? - PullRequest
0 голосов
/ 09 июня 2010

Я пытаюсь обработать цикл for внутри цикла for и просто немного опасаюсь синтаксиса ... Будет ли это работать?По сути, я хочу запускать код для каждой 1000 записей, пока счетчик равен или меньше $ count ... Будет ли работать синтаксис ниже или есть лучший способ?

for($x = 0; $x <= 700000; $x++) {
  for($i = 0; $i <= 1000; $i++) {
     //run the code
  }
} 

Ответы [ 4 ]

2 голосов
/ 09 июня 2010

Ну, по сути, я читаю в текстовом файле и вставляю каждую из строк в БД.Первоначально я пробовал while (! Feof ($ f)) [где $ f = filename], но он продолжает жаловаться на сломанный канал.Я подумал, что это будет другой путь

$ f должен быть дескриптором файла, возвращаемым функцией fopen (), а не именем файла.

$file_handle = fopen($filename, 'r');

while(!feof($file_handle)) {
    $line = fgets($file_handle);

    $line = trim($line); // remove space chars at beginning and end

    if(!$line) continue; // we don't need empty lines

    mysql_query('INSERT INTO table (column) '
               .'VALUES ("'.mysql_real_escape_string($line).'")');
}

Прочитайте документацию по php.net для fopen (), fgets ().Вам также может понадобиться explode (), если вам нужно разбить вашу строку.

Если ваш файл не большой, вы можете сразу прочитать его в массив, например:

$filelines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach($filelines as $line) {
   do_stuff_with($line);
}
2 голосов
/ 09 июня 2010

Синтаксис у вас будет работать, но я не думаю, что он будет делать именно то, что вы хотите.Прямо сейчас он будет выполнять внешний цикл 700,001 раз, и для каждого из них из этих 700,001 раза он будет выполнять внутренний цикл.

Это означает, что в целомВнутренний цикл будет работать 700,001 x 1001 = около 700,7 миллионов раз.

Если это не то, что вы хотите, можете дать немного больше информации?Я действительно не могу понять, что означает «я хочу запускать код для каждой 1000 записей, когда число равно или меньше, чем $ count».Я не вижу никакой переменной с именем $count.

1 голос
/ 09 июня 2010

Хмм.Хорошо ... Ну, по сути, я читаю в текстовом файле и вставляю каждую из строк в БД.Первоначально я пробовал while (! Feof ($ f)) [где $ f = filename], но он продолжает жаловаться на сломанный канал.Я думал, что это будет другой путь ..

Чтобы прочитать текстовый файл построчно, я обычно:

$file = file("path to file")
foreach($file as $line){
 //insert $line into db
}
0 голосов
/ 09 июня 2010

Строго отвечая на вопрос, вы бы хотели что-то вроде этого:

// $x would be 0, then 1000, then 2000, then 3000
for($x = 0; $x < 700000; $x += 1000) {
  // $i would be $x through $x + 999
  for($i = $x; $i < $x + 1000; $i++) {
     //run the code
  }
}

Однако вы должны рассмотреть один из других способов импорта файлов в базу данных.

...