【问题标题】:Why foreach enters into if only on first loop?为什么 foreach 仅在第一个循环时进入?
【发布时间】:2014-07-15 15:24:32
【问题描述】:

如果我只在第一次进入 if 并获取变量值时循环 foreach 循环,那么每次下一次它仍然有旧值。为什么?

如果我 print_r($i) 并杀死它会响应: A0A0A0A0A0A0A0A0A0A0A0A0A0A0TXTTXT16

实际金额是它的结尾(16)。所以这意味着它通过循环循环 16 次,但进入 if 仅在 if $type 更改的第一个循环中进入。所以$type 每次循环运行时都不会得到新的值。

我的代码:

    $recordTypes = array('CnameRecord', 'ARecord', 'MxRecord', 'TxtRecord');
    foreach ($recordTypes as $type) {
        $modelName = $type::model()->tableName();
        $record = $type::model()->findAllbySql("SELECT * FROM $modelName WHERE vhost_id LIKE $id");
        if ($record) {
            foreach ($record as $key=>$rec) {
                if ($type == 'ARecord'){
                    $type = 'A' + $i;
                    $hostname = $rec['sub_vhost_name'];
                    $points_to = $rec['points_to'];
                    $ttl = $rec['ttl'];
                } else if ($type == 'CnameRecord') {
                    $type = 'CNAME';
                    $hostname = $rec['hostname'];
                    $points_to = $rec['points_to'];
                    $ttl = $rec['ttl'];
                } else if ($type == 'MxRecord') {
                    $type = 'MX';
                    $priority = $rec['priority'] . '    ';
                    $points_to = $rec['points_to'];
                    $ttl = $rec['ttl'];
                    $hostname = $rec['host'];
                } else if ($type == 'TxtRecord') {
                    $type = 'TXT';
                    $hostname = $rec['hostname'];
                    $points_to = '"' . $rec['txt_value'] . '"   ';
                    $ttl = $rec['ttl'];
                }
                $i++;
                print_r($type);
                $custom_content = $hostname . ' ' . $ttl . '    ' . 'IN' . '    ' . $type . '   ' . $priority . $points_to . "\n";
            }
        }
    }
print_r($i);die;

【问题讨论】:

  • 迭代器$i初始化必须在foreach循环之外

标签: php loops yii foreach


【解决方案1】:

您正在使用:

foreach ($recordTypes as $type) { ...

在 foreach 中,您正在修改“类型”变量,因此在接下来的 $record 循环中,您将失败任何 if 语句。 将 $type var(在 if 语句中)更改为另一个 var 名称,然后重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2016-09-28
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2021-03-29
    相关资源
    最近更新 更多