PHP foreach遍历数组仅返回最后一个值的问题咨询
问题根源
你代码的核心错误是连续4次对$categories变量直接赋值数组,PHP中对已有变量直接赋值会完全覆盖该变量之前存储的所有内容,不会自动往数组里追加元素。
所有赋值语句执行完后,$categories里只会保留最后一次写入的内容:array('name' => 'reptiles', 'id' => '4')。你后续的遍历是在这个单条关联数组上做的,自然只会输出reptiles和4两个值。
修正方案
先把$categories初始化为空数组,每个分类条目通过$categories[]的语法追加到二维数组中,不要反复覆盖整个变量,修正后的完整代码如下:
// 初始化存储所有分类的二维数组 $categories = []; // 逐个追加分类条目,而非覆盖整个$categories变量 $categories[] = array('name' => 'mamals', 'id' => '1'); $categories[] = array('name' => 'birds','id' => '2'); $categories[] = array('name' => 'fishs', 'id' => '3'); $categories[] = array('name' => 'reptiles', 'id' => '4'); // 遍历全部分类 foreach($categories as $categ){ // 注意:单个$categ是关联数组,需要指定键名输出对应内容 echo '分类名:' . $categ['name'] . ',分类ID:' . $categ['id'] . '<br>'; }
注意点
- 原代码中
$category = $categories;属于无意义的冗余赋值,直接遍历$categories即可 - 遍历二维数组时,循环拿到的每个元素本身是数组类型,直接
echo输出数组会触发PHP的数组转字符串警告,必须指定要输出的键名(如name/id) - 如果要一次性定义所有分类,也可以直接在初始化时写全所有子元素,不用逐行追加,示例代码如下:
$categories = [ ['name' => 'mamals', 'id' => '1'], ['name' => 'birds', 'id' => '2'], ['name' => 'fishs', 'id' => '3'], ['name' => 'reptiles', 'id' => '4'] ];
内容的提问来源于stack exchange,提问作者Ascaris29
相关产品推荐
相关产品推荐

