PHP数组每行输出2个逗号分隔元素 输出不符预期如何修复
代码错误点说明
你的代码存在两个核心逻辑错误:
- 换行触发时机完全颠倒:当前逻辑是当索引
$i能被列数2整除时(也就是$i=0、2、4,对应每行第一个元素),输出完当前元素就直接换行,导致第一个元素单独占一行,不符合「每2个元素凑成一行再换行」的需求。 - 逗号拼接规则错误:非换行分支下给元素值末尾额外加了逗号,导致最后一个元素输出完成后行尾多出多余逗号,元素间的拼接位置也不符合预期。
修正方案
把换行判断调整为每输出完2个元素再触发换行,单个元素输出后仅在非行尾位置加逗号拼接下一个元素即可,修正后的代码如下:
$rates[] = array("2020-01-01"=>3000); $rates[] = array("2020-01-02"=>3010); $rates[] = array("2020-01-03"=>3020); $rates[] = array("2020-01-04"=>3021); $rates[] = array("2020-01-05"=>3030); $rates[] = array("2020-01-06"=>3035); $total = count($rates); $col = 2; for ($i = 0; $i < $total; $i++) { $date = key($rates[$i]); $value = end($rates[$i]); // 输出当前元素的日期和值 echo "{$date},{$value}"; // 每输出完2个元素,输出换行 if (($i + 1) % $col == 0) { echo "</br>"; } else { // 非行尾位置加逗号拼接下一个元素 echo ","; } }
运行上述代码即可得到你预期的输出结果:
2020-01-01,3000,2020-01-02,3010 2020-01-03,3020,2020-01-04,3021 2020-01-05,3030,2020-01-06,3035
如果想要更简洁易维护的写法,也可以用array_chunk先按列数切分数组再逐行拼接:
$col = 2; // 按每2个元素为一组切分数组 foreach (array_chunk($rates, $col) as $row) { $rowElements = []; foreach ($row as $item) { $rowElements[] = key($item) . "," . end($item); } // 每组元素用逗号拼接后输出换行 echo implode(",", $rowElements) . "</br>"; }
内容的提问来源于stack exchange,提问作者Takeov3r
相关产品推荐
相关产品推荐

