PHP遍历库存数组取值异常与表格单元格输出问题求解
问题原因与解决方案
为什么echo $name会输出连续的多个值
你内层遍历的$val['warehouse']是包含warehouse_id、name两个元素的关联数组,foreach循环会依次输出这两个元素的值:第一次拿到warehouse_id的值(比如1),第二次拿到name的值(比如CPT),两次echo的内容没有分隔直接拼接,就会显示成1CPT,本质是你依次输出了数组里的两个标量值,不是数组本身被直接打印。
正确提取仓库ID、匹配对应库存的方法
关联数组不需要循环遍历取值,直接通过指定键名就能拿到对应值:
- 仓库ID:
$val['warehouse']['warehouse_id'] - 仓库名称:
$val['warehouse']['name'] - 对应库存:
$val['quantity_available']
你之前写的内层foreach遍历warehouse数组的逻辑完全多余,还容易出现值判断错误。
单元格内容不拆分的修复方案
你现有代码的问题:
- 重复两次遍历整个库存数组,逻辑冗余,后续加仓库就要加对应循环,维护性差
- HTML拼接时PHP语法分界不规范,从你贴的片段看是字符串拼接时没有正确闭合PHP逻辑段,导致DOM结构异常
推荐先做一次数据整理,把库存按仓库ID存为映射,再直接填入对应单元格,代码更简洁也不会出错:
// 初始化对应仓库的默认库存,避免无库存时出现变量未定义报错 $stock = [ 1 => 0, // CPT仓默认库存0 3 => 0 // JHB仓默认库存0 ]; // 仅遍历一次组装库存映射 foreach ($row['stock_at_takealot'] as $item) { $warehouseId = $item['warehouse']['warehouse_id']; $stock[$warehouseId] = $item['quantity_available']; } ?> <!-- 直接输出到对应单元格即可 --> <td class='small centerCol'><?= $stock[1] ?></td> <td class='small centerCol'><?= $stock[3] ?></td> <td class='small centerCol'>其余列内容</td>
如果要保留循环写法,需要保证PHP和HTML的拼接语法正确,示例如下:
echo "<td class='small centerCol'>"; foreach ($row['stock_at_takealot'] as $val) { if ($val['warehouse']['warehouse_id'] == 1) { echo $val['quantity_available']; } } echo "</td>"; echo "<td class='small centerCol'>"; foreach ($row['stock_at_takealot'] as $val) { if ($val['warehouse']['warehouse_id'] == 3) { echo $val['quantity_available']; } } echo "</td>"; echo "<td class='small centerCol'>"; // 第三列业务逻辑 echo "</td>";
内容的提问来源于stack exchange,提问作者user9361135
相关产品推荐
相关产品推荐

