【发布时间】:2016-08-06 11:18:49
【问题描述】:
我正在制作发票原型以供练习。我使用的是 CakePHP 3,并且项目总是不同的,因此将它们与另一个表中的行关联是行不通的。在每一行中,我都有一个名为 items 的列,其中是一个数组,例如:
array(
array("Name" => "apples",
"Desc" => "a fruit called apple",
"Price" => "1"
),
array("Name" => "orange",
"Desc" => "oranges",
"Price" => "2",
),
array("Name" => "watermelon",
"Desc" => "watermelon",
"Price" => "6"
)
);
我想使用该数组构建一个 foreach 循环来显示发票中的所有项目。
foreach ($items as $i => $row) {
echo $row['Name'] . $row['Price'] . $row['Desc'] . "<br>";
}
我正在尝试使用这种方法从列中获取数据
<?php $items = $billing->items; ?>
然而这是我收到的:
Warning (2): Invalid argument supplied for foreach() [APP/Template\Billing\invoice.ctp, line 56]
如果我尝试回显数据,它会回显就可以了。我不明白为什么我不能把它变成一个变量。
<?= h($billing->items); ?>
【问题讨论】:
-
你可以打印 $billing->items as echo '
'; print_r($billing->items)?我认为 h 函数用于打印 db 特殊字符,因此它能够将其转换为数组,但通常 foreach 循环不能这样做。
-
我不确定你的意思,但它确实像使用
print_r($billing->items)的 echo 一样打印 -
“...物品总是不同的...”这些物品和我一模一样。
-
当时我脑子里已经有了结果,但另一个用户将分配名称、描述和价格。因此,与其每次有人输入不同的内容并关联它们时都创建新行,我决定将其存储在数组中是最好的。如果还有什么我可以做的来简化它,我完全赞成。我只是不知道有什么。 @ndm
-
将项目存储在单独的行中并将它们链接到其他表中的行正是 MySQL 等关系数据库的用途。那么这有什么问题呢?至于您的问题,您不能将数组存储在数据库中,您必须已将其转换为平面格式,并且从错误来看,您尚未(正确)将其转换回来。如果没有相关的详细信息,您可能不会收到任何好的答案。