【问题标题】:PHP foreach and after that while loopPHP foreach 和之后的 while 循环
【发布时间】:2014-04-15 07:00:35
【问题描述】:

我目前有一个查询,它获取数据然后运行另一个查询。然后我回显第二个查询的结果。我想做的是将回声移到 foreach 循环之外,但我不知道该怎么做。

$ids = 2,3;
$id = explode(",",$ids);

$barcode = array();

foreach($id as $value) {
    $sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
    $sql_query->bindParam(":value", $value);
    $sql_query->execute();
    $row = $sql_query->fetch(PDO::FETCH_ASSOC);
    $barcode = $row['barcode'];


    /* I want to move this part starting from here outside the foreach */ 

    $sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode=:barcode");
    $sql_select_all->bindParam(":barcode", $barcode);
    $sql_select_all->execute();
    while($row = $sql_select_all->(PDO::FETCH_ASSOC)){

        $name = $row['name'];
        $img = $row['image'];
        $desc = $row['desc'];

        echo $name.$img.$desc;
    }
    /* ending here */

}

如何将 echo 线移出 foreach 循环?

【问题讨论】:

  • 剪切和粘贴?是什么阻止了你?
  • 那真是太好了..有趣..
  • 这意味着您还没有真正描述您的问题是什么。如果您没有告诉我们是什么阻止您将其搬出,那么没有人可以帮助您。为什么不能简单地将它移到 foreach 循环下方?你有没有尝试过?如果你这样做会发生什么?
  • 好的..我需要我的第一个查询中的条形码来运行foreach循环内的第二个查询..所以将它移到外面我只会得到最后一个条形码而不是两者..
  • 是的......完全是......英语不太好......这就是为什么我得到2票......这是我的错......

标签: php mysql foreach while-loop


【解决方案1】:

试试

foreach($id as $value){
$sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
$sql_query->bindParam(":value", $value);
$sql_query->execute();
$row = $sql_query->fetch(PDO::FETCH_ASSOC);
// make array with the entry
$barcode[] = '"'.$row['barcode'].'"';    
}
// after foreach we explode the array and add comma , 
$barcode = explode(',',$barcode)

// using mysql ( [IN][1] ) query instead of ( = )
$sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode in ($barcode)'");
$sql_select_all->bindParam(":barcode", $barcode);
$sql_select_all->execute();
while($row = $sql_select_all->(PDO::FETCH_ASSOC)){

$name = $row['name'];
$img = $row['image'];
$desc = $row['desc'];

echo $name.$img.$desc;

using IN() Function

【讨论】:

  • 好的,这很好.. 但是如果我有这样的echoecho <div id="i want to use the productid here.">$name.$img.$desc</div>;,那我该怎么办?
  • 我添加了IN()的引用
  • 你可以使用join table或alter table with product id in Inventory table
【解决方案2】:

您需要做的是将第二个查询的结果存储到一个数组中。然后你可以将 echo 移出 for 循环并在你的新数组上运行一个循环,如下所示:

$ids = 2,3;
$id = explode(",",$ids);

$barcode = $results = array();

foreach($id as $value){
    $sql_query = $db->prepare("SELECT barcode FROM product WHERE id=:value");
    $sql_query->bindParam(":value", $value);
    $sql_query->execute();
    $row = $sql_query->fetch(PDO::FETCH_ASSOC);
    $barcode = $row['barcode'];


    /*i want to move this part starting from here outside the foreach*/ 

    $sql_select_all = $db->prepare("SELECT * FROM inventory WHERE barcode=:barcode");
    $sql_select_all->bindParam(":barcode", $barcode);
    $sql_select_all->execute();
    while($row = $sql_select_all->(PDO::FETCH_ASSOC)){
        $results[] = $row;
        //$name = $row['name'];
        //$img = $row['image'];
        //$desc = $row['desc'];

        //echo $name.$img.$desc;
    }
    /*ending here*/
    foreach($results as $row) {
        echo $row['name'] . $row['image'] . $row['desc'];
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2015-07-03
    • 2014-10-19
    • 2017-05-28
    • 2018-02-09
    • 2012-10-02
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多