Php 为什么foreach只在第一个循环中进入?

Php 为什么foreach只在第一个循环中进入?,php,loops,yii,foreach,Php,Loops,Yii,Foreach,若我只在foreach循环第一次进入If并获取变量值时循环,那个么下次它仍然有旧值。为什么? 如果Iprint\u r($I)并杀死它,它会响应: A0A0A0A0A0TXTTXT16 实际金额是它的结尾(16)。这意味着它在循环中循环了16次,但只在if$type的第一个循环中进入if。所以,$type不会在每次运行循环时都获得新值 我有: $recordTypes = array('CnameRecord', 'ARecord', 'MxRecord', 'TxtRecord');

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

如果I
print\u r($I)
并杀死它,它会响应:
A0A0A0A0A0TXTTXT16

实际金额是它的结尾(16)。这意味着它在循环中循环了16次,但只在if
$type的第一个循环中进入if。所以,
$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;
您正在使用:

foreach ($recordTypes as $type) { ...
在foreach中,您正在修改“type”var,因此在接下来通过$record的循环中,您将失败任何if语句。
将$type var(if语句内部)更改为另一个var名称,然后重试。

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