Php 减少Foreach循环?
它将数据从modelItem::find()循环放入$itemsData[]数组中 当我输出数据时,我必须做两次foreach,如何减少到1个foreach循环Php 减少Foreach循环?,php,Php,它将数据从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_i
$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
)
)
)
在我看来,你已经可以做一个循环了:
foreach ($itemsData as $item) {
echo $item->name;
}
之所以需要使用foreach两次,是因为mysql本身返回一个集合。“modelItem::find”依次返回一个数组 当您执行
$itemsData[]=$item代码>附加一个数组。产生嵌套数组
一个简单的解决办法是改变:
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
foreach($item as $x)
$itemsData[] = $x;
但这仍然给了你一个机会,所以你可能想试试:
$item = modelItem::find('id = :item_id', array('item_id' => $OptionData['item_id']));
$itemsData=array_merge($itemsData, $item);
在第二个示例中,您甚至可以直接传递modelItem::find()
。正确的代码是
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使用该元素作为回送元素。熟记PHP的数组函数总是一件好事。看看
参见工作代码
例如
关于为什么要将它放在单个foreach
中?@halfdan他有嵌套数组,建议的解决方案将不起作用。你得到我的+1是因为它不是那么糟糕,但无论如何它不会起作用,因为$item
是一个array@user622378是的,那会有用的,如果放入数组的$item
实际上是一个具有(可访问的)name属性的对象。如果您调试$itemsData
/$item
变量,并看到它不是您放在其中的对象,您就会明白为什么在您的情况下这不起作用。我不知道返回了什么变量,因为我不知道modelItem::find
函数返回了什么,我只是复制了您在问题中已经指定的内容:echo$item->name
@Peter,正是!您看到了代码,只是复制了一个块,然后说在这里。下一次考虑在整体上阅读问题。这是行不通的。你可以清楚地看到他有嵌套的数组。起初,调试信息不在他的问题中。