PHP foreach 循环不适用于嵌套数组

PHP foreach loop not working on an a nested array

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

这是数组:

$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'];  
}

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

您的内部数组中没有 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。

由于数组的结构方式,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 循环应该适用于这样结构的数组。

如果你这样做 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 语句应该正确迭代。