PHP foreach循环不能在嵌套数组上工作

时间:2015-01-04 19:47:26

标签: php arrays foreach

我不知道为什么这不起作用。我尝试了一切。我确定我错过了什么。

这是数组:

$userList = array('first_name'=>array('John','Jane'), 'last_name'=>array('Smith','Doe'));

for循环有效,我确实得到了正确的输出:

$usercount = count($userList);  
for($i=0; $i < $usercount; $i++) {  
echo $userList['first_name'][$i];  
}

但是这个foreach循环并没有:

foreach($userList as $user) {  
echo $user['first_name'];  
echo $user['last_name'];  
}

我该怎么办?代码有什么问题?

3 个答案:

答案 0 :(得分:0)

内部数组中没有first_namelast_name个键。 $user包含的array('John','Jane')分别为array('Smith','Doe')

你可能想要的是一个像以下结构:

$userList = array(
    array('first_name' => 'John', 'last_name' => 'Smith'), 
    array('first_name' => 'Jane', 'last_name' => 'Doe')
);

这使您可以使用已有的foreach。

答案 1 :(得分:0)

由于数组的结构方式,foreach方法无法为您提供所需的输出:

foreach($userList as $user) {
    //$user is array('John', 'Jane') on the first iteration
}

您可以将数组更新为:

array(
    array('first_name' => 'John', 'last_name' => 'Smith'),
    array('first_name' => 'Jane', 'last_name' => 'Doe')
);

你的foreach循环应该使用类似结构的数组。

答案 2 :(得分:0)

如果你print_r($userList);输出

Array
(
    [first_name] => Array
        (
            [0] => John
            [1] => Jane
        )

    [last_name] => Array
        (
            [0] => Smith
            [1] => Doe
        )
)

如您所见,您将所有名字存储在一个数组中,所有姓氏存储在另一个数组中。我认为你的意思是将每个用户存储在他们自己的数组中。

要做到这一点,你需要像

这样的东西
 $userList = array(array("first_name" => "John", "last_name" => "Doe"), array("first_name" => "Jane", "last_name" => "Doe"));

现在,如果您print_r($userList);将输出:

Array
(
    [0] => Array
        (
            [first_name] => John
            [last_name] => Doe
        )

    [1] => Array
        (
            [first_name] => Jane
            [last_name] => Doe
        )

)

您的foreach语句应该正确迭代。