如何解决减少Foreach循环?
| 它将数据从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的原因是因为mysql本身会返回一个集合。 \“ modelItem :: find \”依次返回一个数组。
当您执行“ 1”时,将附加一个数组。导致嵌套数组。
一个简单的解决方案是更改:
$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的数组函数总是很不错的。看一眼
http://php.net/manual/de/ref.array.php
查看工作代码
http://codepad.org/lyDlutFm
举个例子
问候
,在我看来,您已经可以执行一个循环:
foreach ($itemsData as $item) {
echo $item->name;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。