【问题标题】:php foreach iteration over object property array not incrementing the valuephp foreach对对象属性数组的迭代不增加值
【发布时间】:2014-01-12 07:12:52
【问题描述】:

请帮忙!我已经盯着这个太久了。我有一个对象的属性,它是一个对象数组。我想将一个对象传递给父对象的方法,并在该数组属性中搜索匹配项,如果找到则返回索引。否则,我需要它返回-1。由于某种原因,它没有迭代。如果我回显应该是 $order->product 属性(循环期间索引指向的位置),它是不变的。我已经转储了数组,我知道它包含不同的值。我可以向您展示一个大的 var 转储,但我想我会先询问是否有一个简单的错误或其他对您来说很明显但我错过了的东西。

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;
    } 
  }

如果有人有任何想法,我愿意讨论并根据需要发布更多信息。感谢您的宝贵时间。

【问题讨论】:

  • 你能显示$this->orders(或其中的一部分)吗?
  • in_array 只返回一个布尔值。我将添加 var_dump,一秒钟...
  • if (!in_array((array)$this->orders, $prod)) return -1; 编辑,哦,你想要钥匙。

标签: php arrays foreach object-property


【解决方案1】:

在第一次迭代时,您总是 returning 一个值,$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

【讨论】:

  • 不应该是return -1;吗?您似乎错过了分号。
  • 确实已经修复了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多