Foreach循环仅返回第一个结果

时间:2020-10-05 13:06:06

标签: php arrays multidimensional-array

我无法在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循环。

1 个答案:

答案 0 :(得分:0)

您当前正在第一个$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,因此我可以调用fetch()

要获取与$value匹配的Cookie的数量

$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