2013-01-23 64 views
1

我注意到一些奇怪的行爲,而通過一些數據循環。我相信這很簡單,但我似乎無法找到錯誤。 我有以下邏輯:php代碼 - 試圖循環數組

  <?php 
      print 'dumping data : <BR>'; 
      var_dump($portvlan); 
      print '<BR>'; 
      print 'looping through data: <BR>'; 
       foreach ($portvlan as $vlandetail){ 
        echo 'Vlanid: '.$vlandetail['VlanId'].'<BR>'; 
        echo 'Name: '.$vlandetail['Name'].'<BR>'; 
        echo 'Mode: '.$vlandetail['Mode'].'<BR>'; 
       } 
      ?> 

這是我得到的輸出:

dumping data : 
array(3) { ["VlanId"]=> string(2) "33" ["Name"]=> string(6) "USR_33" ["Mode"]=> string(6) "Access" } 
looping through data: 
Vlanid: 3 
Name: 3 
Mode: 3 
Vlanid: U 
Name: U 
Mode: U 
Vlanid: A 
Name: A 
Mode: A 

我所期待的是看到它打印一行3個細胞,具有以下值: 33,USR_33,Access。

你能告訴我我要去哪裏嗎? 謝謝。當$ portvlan陣列有多個入口

編輯1

這種邏輯正常工作。 例如,在另一組數據,後續代碼var_dump給出了這樣的結果:

array(6) { [0]=> array(3) { ["VlanId"]=> string(1) "1" ["Name"]=> string(1) "1" ["Mode"]=> string(5) "Trunk" } [1]=> array(3) { ["VlanId"]=> int(2) ["Name"]=> int(2) ["Mode"]=> string(5) "Trunk" } [2]=> array(3) { ["VlanId"]=> int(3) ["Name"]=> int(3) ["Mode"]=> string(5) "Trunk" } [3]=> array(3) { ["VlanId"]=> int(4) ["Name"]=> int(4) ["Mode"]=> string(5) "Trunk" } [4]=> array(3) { ["VlanId"]=> int(5) ["Name"]=> int(5) ["Mode"]=> string(5) "Trunk" } [5]=> array(3) { ["VlanId"]=> string(2) "33" ["Name"]=> string(2) "33" ["Mode"]=> string(5) "Trunk" } } 

,循環邏輯正常工作。

+1

您打算給'$ portvlan'設置一個'vlans'數組嗎?如果是這樣,那麼你的數據應該是一個數組的數組,即'array(array(「VlanID」=>「33」,「Name」=>「USR_33」,「Mode」=>「Access」))''。你如何檢索源數據? – mellamokb

+0

@mellamokb你可以發佈這個答案? – dot

回答

1

$vlandetail將在循環的每次迭代中填充與數組中不同的項目。你不應該把$vlandetail當作一個數組。只需直接使用它。

要得到數組項的鍵名,您必須將循環結構改成這樣:

foreach ($portvlan as $key => $vlandetail) { 
    echo $key . ': ' . $vlandetail . '<br>'; 
} 
+1

只有在$ portvlan中只有一條記錄時,代碼纔會失敗。如果我有多個記錄,它用當前的邏輯很好地循環。 ? – dot

+0

然後,問題可能出現在您要在portvlan數組中添加數據的代碼中。 –

0

你如何讓你的$portvlan

如果你能知道的是$portvlan不是$vlandetail數組,你可以簡單地做到這一點,

$portvlan = array($portvlan); 
// start loop 

或者你也可以做到這一點,你循環之前,以確保$portvlan是形成一個數值數組$vlandetail

$portvlan = (isset($portvlan[0]))?$portvlan:array($portvlan); 
// start loop