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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:01:06