【问题标题】:PHP global variable don't set via foreachPHP 全局变量不通过 foreach 设置
【发布时间】: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


【解决方案1】:

这是非常反常的,但我将$mode 完全移出所有循环,并且代码现在可以工作

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2013-10-21
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    相关资源
    最近更新 更多