首页 > 解决方案 > Foreach 循环只返回第一个结果

问题描述

我在 foreach 中显示有关 php 数组的所有结果时遇到问题。

我编写了 sql 查询,我希望它循环遍历所有返回结果的值。

问题是我不知道我做错了什么,因为响应只返回第一个数组值(巧克力)的结果,而不是全部三个。

    $cookies = array();
    $cookies[] = 'Chocolate';
    $cookies[] = 'Vanilla';
    $cookies[] = 'Stracciatella';

    $ar = [];
    foreach ($cookies as $cookie => $value) {
        $results = $this->getEntityManager()->getConnection()->executeQuery(
            "SELECT * FROM sweets WHERE cookies LIKE :cookies",
            ['cookies' => '%"' . $value . '"%']
        );
    }
    foreach ($results as $result) {
         $ar[] = $result;
    }
  return $ar;

我制作了这个标签,因为问题不在于查询,而在于 foreach 循环。

标签: phparraysmultidimensional-array

解决方案


您当前正在$results第一个循环的每次迭代中重写变量foreach。您需要将结果附加到另一个变量,然后迭代,或者只是减少到一个foreach循环。

    $cookies = array();
    $cookies[] = 'Chocolate';
    $cookies[] = 'Vanilla';
    $cookies[] = 'Stracciatella';

    $results = [];
    foreach ($cookies as $cookie => $value) {
        $results[] = $this->getEntityManager()->getConnection()->executeQuery(
            "SELECT * FROM sweets WHERE cookies LIKE :cookies",
            ['cookies' => '%"' . $value . '"%']
        );
    }
    return $results;

为避免更新此内容而无法满足您的需求,我将在此处提供一些额外的工作流程,您可以选择并根据自己的喜好进行调整。我不确定您使用的是什么 CMS,所以我假设它在PDOStatement这里返回 a,所以我可以调用fetch()

获取匹配的 cookie 的计数$value

$cookies = ['Chocolate', 'Vanilla', 'Stracciatella'];
$counts = array_fill_keys($cookies, 0);
foreach ($cookies as $cookie => $value) {
    $counts[$cookie] = $this->getEntityManager()->getConnection()->executeQuery(
        "SELECT COUNT(*) FROM sweets WHERE cookies LIKE :cookies",
        ['cookies' => '%"' . $value . '"%']
    )->fetch();
}

要获取 cookie 数据并计算结果:

$cookies = ['Chocolate', 'Vanilla', 'Stracciatella'];
$sweets = []; // previously $results
$counts = array_fill_keys($cookies, 0);
foreach ($cookies as $cookie => $value) {
    $sweet = $this->getEntityManager()->getConnection()->executeQuery(
        "SELECT * FROM sweets WHERE cookies LIKE :cookies",
        ['cookies' => '%"' . $value . '"%']
    );
    $sweets[] = $sweet;
    $counts[$cookie] += 1;
}

// This gives you:
print_r($sweets); // the data
print_r($counts); // the counts

推荐阅读