2014-07-15 104 views
0

如果我只在第一次循環foreach循環時進入if和獲取變量值,所以下次它仍舊有舊值。爲什麼?爲什麼只有在第一個循環時纔會進入foreach?

如果我print_r($i)並殺死它響應: A0A0A0A0A0A0A0A0A0A0A0A0A0A0TXTTXT16

真正量是它的(16)結束。所以這意味着它通過循環循環16次,但是如果僅在更改的第一個循環中進入。因此,$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; 
+0

迭代器'$ i'初始化必須在foreach循環之外 –

回答

1

您使用:

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

而且裏面的foreach你正在修改的 「類型」 的變種,所以在通過$記錄的下一個循環,你如果有任何陳述,將會失敗。 將$ type var(在if語句內)更改爲另一個var名稱,然後重試。

相關問題