【问题标题】:Remove duplicates fetched from while loop删除从 while 循环中获取的重复项
【发布时间】:2012-03-15 14:44:08
【问题描述】:

我希望从带有 while 循环的存储过程中调用的数组中删除重复的条目。

// Prepare stored procedure call
   $sth = $dbh->prepare('CALL sp_get_recipes()'); 

   // Call the stored procedure
    $res = $sth->execute();

    if ($res){                  
        while( $row = $sth->fetchObject() ){
            echo $row->Recipe;  // I would like to echo this row just once.
            echo '<ul class="recipe-body"><li>'.$row->Ingredient."&nbsp;".$row->Quantity."&nbsp;".$row->UoM.'</li></ul>';
            }
        // Close connection
            $dbh = null;
        }else{
        $arr = $sth->errorInfo();
        echo "Execution failed with MYSQL: " . $arr[0] . "\n";
        die();
        }

我的理解是我的 echo $row->Recipe;必须以某种方式独立存在。我一直在研究 array_unique 来回显该值一次,但我似乎无法准确地弄清楚它。如果有人能指出我正确的方向,那就太好了。

更新 感谢所有回复,我已修复存储过程以返回唯一行。

【问题讨论】:

  • 如何从过程中返回唯一的行?

标签: php arrays pdo


【解决方案1】:

在while 之前创建一个临时数组,并将每个已回显的Recipe 存储在其中。在回显之前检查当前配方的临时数组(如果它包含不要回显它,否则回显并将其存储在临时数组中)。

【讨论】:

    【解决方案2】:

    如果您无法更改我建议的数据库结构,您可以首先将您从数据库查询中获得的信息存储到对象中(例如,某种带有成分对象数组的食谱对象),然后构建您的实际输出.

    如果您可以更改数据库结构或查询方式(如果后者已经为您提供了我将要推荐的内容),您可以为具有某种 ID 的食谱创建一个表(假设数据库是关系型的)以及另一个配方成分表,其中每个成分行还存储其所属配方的 ID。

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2011-11-05
      • 2011-03-09
      • 2015-05-24
      相关资源
      最近更新 更多