它将数据放入来自modelItem :: find()循环
的$ itemsData []数组中当我输出数据时,我必须做两次foreach,如何减少到1个foreach循环?
$itemsData = array();
foreach ($_SESSION['Cart'] as $optionid => $OptionData) {
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
$itemsData[] = $item;
}
// How to put this in into single foreach?
foreach ($itemsData as $items) {
foreach($items as $item) {
echo $item->name;
}
}
Array
(
[0] => Array
(
[0] => modelItem Object
(
[id] => 319
[name] => xxxxxx xxxxxx
[category_id] => 434
)
)
[1] => Array
(
[0] => modelItem Object
(
[id] => 320
[name] => xxx & xxxx xxxxx
[category_id] => 424
)
)
)
答案 0 :(得分:2)
你需要使用foreach两次的原因,是因为mysql本身返回一个set。 “modelItem :: find”依次返回一个数组。
执行$itemsData[] = $item;
后,您追加一个数组。导致嵌套数组。
一个简单的解决方案就是改变:
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
foreach($item as $x)
$itemsData[] = $x;
但这仍然给你一个foreach,所以你可能想尝试:
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
$itemsData=array_merge($itemsData, $item);
在第二个示例中,您甚至可以直接传递modelItem::find()
。
答案 1 :(得分:0)
正确的代码是
foreach ($_SESSION['Cart'] as $optionid => $OptionData) {
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
if(!empty($item)){
$item = array_shift($item);
echo $item->name;
}
}
它基本上做的是,假设$ item数组只有一个元素,并通过shift将此元素用作echo的元素。了解PHP的数组函数总是很好。看看
http://php.net/manual/de/ref.array.php
参见工作代码
示例
此致
答案 2 :(得分:-1)
对我来说,你已经可以做一个循环:
foreach ($itemsData as $item) {
echo $item->name;
}