You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 10:18:17