【发布时间】:2018-06-26 06:34:22
【问题描述】:
在我尝试将 $mode 设置为 1 后,echo 命令打印我:
mode: 0 (see here)
before: 0
after: 1
mode: 0 (see here)
before: 0
after: 1
为什么?
$generations = str_get_html($json['html'])->find('option');
$loop = true;
$tries = 1;
$mode = 0;
while ($loop && $tries > 0) {echo 'mode: '.$mode.' (see here)<br>';
$loop = false;
foreach ($generations as $generation) {
++$j;
if ($j == 0) continue; // Пропускаем первый элемент спарсенного списка
$params = array(
// [0] - числовой ID, [1] - "человекопонятное" название
'filter_brand' => $car[0],
'filter_model' => $model[0],
);
if ($generation != null) {
if ($mode == 0) {
$generationn = array(trimNumber(trim($generation->getAttribute('value'))), trim($generation->plaintext));
$params['filter_generation'] = $generationn[0];
$carlist_plain = parse('http://podbor-akkumulyatora.ru/site/submit/?' . http_build_query($params));
if (!$carlist_plain) die('Не удалось спарсить двигатели у поколения ('.$generationn[1].') модели ('.$model[1].') машины ('.$car[1].')');
} else {
// Not working
$gen_a = $generation->find('a', 0);
$generationn = array(trim($gen_a->href), trim($gen_a->plaintext));
debug($generationn);
//$carlist_plain = parse('http://podbor-akkumulyatora.ru/site/submit/?' . );
}
} else {
$carlist_plain = parse('http://podbor-akkumulyatora.ru/site/submit/?' . http_build_query($params));
if (!$carlist_plain) die('Не удалось спарсить двигатели у модели ('.$model[1].') машины ('.$car[1].')');
}
$carlist_plain = str_get_html($carlist_plain[0]);
$carlist = $carlist_plain->find('.carlist ul li');
if (count($carlist) < 1) {
$generations = $carlist_plain->find('.generation ul li[itemprop="itemListElement"]');
$loop = true;
--$tries;
echo 'before: '.$mode.'<br>';
$mode = 1; // Not working
echo 'after: '.$mode.'<br><br>';
break;
}
// Handling $carlist here...
}
}
【问题讨论】:
-
因为在
else分支中你将它设置为0。 -
可能不满足
if中的条件 -
实际上代码循环 (
while) 只运行了一次,当时的值为 0:- eval.in/936347 -
循环运行一次,因为尝试只设置为 1。循环第一次运行时,模式为 0,因为这是它的起始值,所以这就是你所看到的。循环永远不会再次运行,因为它 $tries 变为 0。
-
Tries NOT 变为 0。我调试了它。你没有被检查并否决我的问题。我什至评论了
// else $mode = 0;,它没有运行。始终只运行且只有if条件,else不运行。而while不是一次调用,而是调用了两次,所以我得到了mode: 0 mode: 0
标签: php loops variables foreach