Foreach只返回第一个值


Foreach only returns 1st value

我有一个foreach代码,它应该从数组中获取所有值,我在foreach循环之外调用return,但即使如此,我仍然只获取第一个值。

这是我使用的方法:

public function getPriceItem($orderNumber){
  try {
    $query = "SELECT * FROM `orderlist` WHERE `orderNumber` = :orderNumber";
    $stmt = $this->dbh->prepare($query);
    $stmt->bindParam(":orderNumber", $orderNumber);
    $stmt->execute();
    $result = $stmt->fetchAll();
    $i = 0;
    $res = '';
    foreach ($result as $item) {
      $product_arr = explode (",", $item['productName']);
      // $price_arr = explode (",", $item['productPrice']);
      $qty_arr = explode (",", $item['qty']);
        $res .= '<tr><td>'.$product_arr[$i].'(aantal'.$qty_arr[$i].')</td></tr>';
        $i++;
    }
    return $res;
  } catch (Exception $e) {
    $this->error = $e->getMessage();
  }
}

如有任何帮助,我们将不胜感激。

您不需要遍历在foreach中创建的乘积和数量数组,还需要遍历它们:

foreach ($result as $item) {
    $product_arr = explode (",", $item['productName']);
    $qty_arr = explode (",", $item['qty']);
    foreach($product_arr as $k => $product) {
        $res .= '<tr><td>'.$product.'(aantal'.$qty_arr[$k].')</td></tr>';
    }
}

在我看来不需要$i

这是假设你在乘积数组和数量数组中有同样多的值。请提供$result的输出和您想要的输出!

我想你想要所有与订单号相关的产品及其数量。然后,您需要在foreach循环中再使用一个for循环。用下面给出的代码修改您的代码:

public function getPriceItem($orderNumber){
  try {
    $query = "SELECT * FROM `orderlist` WHERE `orderNumber` = :orderNumber";
    $stmt = $this->dbh->prepare($query);
    $stmt->bindParam(":orderNumber", $orderNumber);
    $stmt->execute();
    $result = $stmt->fetchAll();
    $res = '';
    foreach ($result as $item) {
      $product_arr = explode (",", $item['productName']);
      // $price_arr = explode (",", $item['productPrice']);
      $qty_arr = explode (",", $item['qty']);
      for($i=0;$i<count($product_arr) && i< count($qty_arr);i++)
        $res .= '<tr><td>'.$product_arr[$i].'(aantal'.$qty_arr[$i].')</td></tr>';
    }
    return $res;
  } catch (Exception $e) {
    $this->error = $e->getMessage();
  }
}