PHP代码 - 尝试循环数组

时间:2013-01-23 00:52:32

标签: php

我在循环浏览一些数据时注意到一些奇怪的行为。我确信这很简单,但我似乎无法找到这个bug。 我有以下逻辑:

            <?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。

你能告诉我哪里出错吗? 感谢。

编辑1

当$ portvlan数组有多个条目时,此逻辑正常工作。 例如,在另一组数据上,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" } } 

循环逻辑工作正常。

2 个答案:

答案 0 :(得分:1)

在循环的每次迭代中,

$vlandetail将使用与数组不同的项填充。您不应该将$vlandetail视为数组。直接使用它。

要获取数组条目的键名,必须将循环结构更改为:

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

答案 1 :(得分:0)

如何获得$portvlan

如果您知道$portvlan不是$vlandetail的数组,则可以执行此操作,

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

或者您可以在循环之前执行此操作,以确保$portvlan是由$vlandetail

形成的数字数组
$portvlan = (isset($portvlan[0]))?$portvlan:array($portvlan);
// start loop