php - 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 循环。
解决方案
您当前正在$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
推荐阅读
- javascript - React Native:从类调用功能组件内部的函数
- loopbackjs - Loopback 4 验证返回 422 未执行,以及如何只需要三个属性之一
- python - psycopg2.extras.DictRow 使用 for 与 next 的行为不同
- python - 在 Python Dataframe 中查找匹配的相似关键字
- rust - 为什么我需要 mod 和 use 才能将模块引入范围?
- kubernetes - minikube 中 Kubernetes 上的 Kafka 无法正常工作
- keyboard - Shift + home 不再正确突出显示
- html - 悬停时在按钮内显示一些文本
- aws-lambda - 获取供应商层的 ARN
- c# - tcp/ip c# 服务器连接被拒绝