请帮忙!我一直盯着这个问题太久了。我有一个对象的属性是一个对象数组。我想将一个对象传递给父对象的方法,并在该数组属性中搜索匹配项,如果找到一个,则返回索引。否则,我需要它返回-1。出于某种原因,它不是迭代的。如果我回应一下$ order->产品属性(索引在循环期间指向的位置),它就是不变的。我已经转储了数组,我知道它包含不同的值。我可以向你展示一个很大的转储,但我想我会首先询问是否有一个简单的错误或其他一些对我来说很明显的错误。
public function getItemIndex($prod) {
if (isset($this->orders)){
foreach($this->orders as $key => $order) {
if ($order->product == $prod) { //if I echo this $order->product to the screen, it is unchanging
return $key;
} else { return -1; }
}
}
else {
return -1;
}
}
如果有人有任何想法,我愿意根据需要讨论并发布更多信息。谢谢你的时间。
答案 0 :(得分:5)
您始终return
第一次迭代的值,$key
或-1
。尝试删除您当前拥有的else
语句。这将允许您完全遍历整个数组。
public function getItemIndex($prod) {
if (isset($this->orders)){
foreach($this->orders as $key => $order) {
if ($order->product == $prod) { //if I echo this $order->product to the screen, it is unchanging
return $key;
}
}
}
return -1;
}
一旦它迭代了所有内容并且没有找到任何匹配项,它将仅return -1
。如果找到匹配,它仍然会return $key
。