Php 减少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

它将数据从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
                )

        )

)

在我看来,你已经可以做一个循环了:

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,正是!您看到了代码,只是复制了一个块,然后说
在这里。下一次考虑在整体上阅读问题。这是行不通的。你可以清楚地看到他有嵌套的数组。起初,调试信息不在他的问题中。