PHP中使用For-Each遍历数组仅显示最后一个值的问题排查
问题分析与解决方案
错误原因
你定义的$user数组是单层关联数组,PHP里关联数组的键是唯一的。你重复使用了Gebruikersnaam、Wachtwoord、Email这三个键,后面的键值会直接覆盖前面的。比如第二个用户的Gebruikersnaam会覆盖第一个的,直到最后一组值把前面的全部覆盖,最终数组里只剩最后一个用户的三组键值对,所以foreach遍历只能输出这三组内容,看不到5个用户的完整信息。
解决方案
要把每个用户的信息封装成独立的子数组,外层用一个数组存放这5个用户子数组,也就是创建一个二维数组。这样每个用户都是外层数组的一个元素,遍历外层数组就能逐个获取每个用户的完整信息。
修正后的代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>13-FOR-EACH controle structuren</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href=""> </head> <body> <?php $users = array( array( "Gebruikersnaam" => "OJ", "Wachtwoord" => "Aapje@123", "Email" => "info@officialjens.be" ), array( "Gebruikersnaam" => "Wolf", "Wachtwoord" => "Wolfje@123", "Email" => "wolf@wolftm.nl" ), array( "Gebruikersnaam" => "PietjePuk", "Wachtwoord" => "Pukje@123", "Email" => "help@pietpjepuk.eu" ), array( "Gebruikersnaam" => "Aquila", "Wachtwoord" => "Aquila@123", "Email" => "info@aquila.org" ), array( "Gebruikersnaam" => "CS", "Wachtwoord" => "CS@123", "Email" => "info@creationlystudio.com" ) ); print "<ol>"; foreach ($users as $index => $user) { print "<li>用户 " . ($index + 1) . ":</li>"; print "<ul>"; foreach ($user as $key => $value) { print "<li>$key : $value</li>"; } print "</ul>"; } print "</ol>"; ?> </body> </html>
代码说明
- 将原数组改为二维数组,每个子数组对应一个用户的完整信息
- 外层foreach遍历所有用户,内层foreach遍历当前用户的所有属性
- 用有序列表嵌套无序列表的结构,让输出层级更清晰
内容的提问来源于stack exchange,提问作者Exoisme
相关产品推荐
相关产品推荐

