如何循环遍历PHP关联数组中各元素对应索引位置的数值
问题原因
你出现循环只能进入第一个索引的核心问题是外层循环的终止条件设置错误,大概率是你误把关联数组本身的元素个数(4个)当成了子数组需要遍历的索引数,或者只判断了单个子数组的长度。
正确实现思路
要实现按索引轮次遍历(先取所有元素的第0位,再取所有元素的第1位,以此类推),按以下步骤写代码即可:
- 先统计所有子数组的最大长度,确保不会漏掉长数组的尾部元素
- 外层循环控制要遍历的索引位
- 内层循环遍历关联数组的每个元素,按当前索引位取值,注意做存在性判断避免报错
示例代码
假设你的关联数组结构如下:
$myArr = [ 'b1' => [0, 0, 1, 1], 'b2' => [1, 0, 0, 1], 'b3' => [1, 1, 0, 0], 'b4' => [1, 1, 1, 0] ];
遍历代码:
// 计算所有子数组的最大索引长度 $maxLen = 0; foreach ($myArr as $item) { $len = count($item); if ($len > $maxLen) $maxLen = $len; } // 外层循环遍历每一轮的索引位 for ($i = 0; $i < $maxLen; $i++) { echo "第".($i+1)."轮结果:\n"; // 内层循环遍历所有关联数组元素 foreach ($myArr as $key => $val) { // 存在当前索引才输出,避免Undefined array key报错 if (isset($val[$i])) { echo "{$key} 得到 {$val[$i]}\n"; } } }
内容的提问来源于stack exchange,提问作者Ebere
相关产品推荐
相关产品推荐

