Php 为foreach中的每个数组结果赋值

Php 为foreach中的每个数组结果赋值,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我使用PHP和MySql查询了所有特定口味的cookie,以获得一系列cookie。查询返回每种口味的饼干数量。它只返回数字,就像我执行fetch()一样。不必要的数组嵌套 代码如下: $cookies = array(); $cookies[] = 'Chocolate'; $cookies[] = 'Vanilla'; $cookies[] = 'Stracciatella'; $results = []; foreach ($cookies as $cookie) { $resu

我使用PHP和MySql查询了所有特定口味的cookie,以获得一系列cookie。查询返回每种口味的饼干数量。它只返回数字,就像我执行fetch()一样。不必要的数组嵌套

代码如下:

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

$results = [];
foreach ($cookies as $cookie) {
    $results[] = $this->getEntityManager()->getConnection()->executeQuery(
        "SELECT COUNT(*) FROM sweets WHERE cookies LIKE :cookies",
        ['cookies' => '%"' . $cookie . '"%']
    )->fetchColumn();
}
在这里,我得到了如下结果:

 [
    8,
    4,
    1
 ]
现在,我想将每个值都分配给它cookie,这样我就可以得到干净的数组键名和结果,如:

这将是期望的输出:

array('Chocolate' => '8', 'Vanilla' => '4', 'Stracciatella' => '1');
所以我尝试了一些东西,比如:

  $cookieCount = [];
    foreach ($results as $key => $value) {
        $cookieCount['Chocolate'] = $value;
        $cookieCount['Vanilla'] = $value;
        $cookieCount['Stracciatella'] = $value;
    }

    return $cookieCount;

有人能帮忙吗?谢谢你把钥匙弄错了,应该是:

    $cookieCount = [];
    foreach ($results as $key => $value) {
        $roleCount[$cookie] = $value;
    }

    return $cookieCount; // or $roleCount ?

而迭代
foreach($results as$key=>$value)
是不需要的。

您可以用稍微不同的方式完成这一点,并通过一个查询而不是每个cookie一个查询来完成您想要的:

$sql = 'SELECT cookies, count(*) as cnt FROM sweets GROUP BY cookies';
$queryResults = $this->getEntityManager()->getConnection()->executeQuery($sql)->fetchAll(PDO::FETCH_ASSOC);
$results = [];
foreach ($queryResults as $queryResult) {
    $results[$queryResult['cookies']] = $queryResult['cnt'];
}
(我不确定您使用的是哪种DBAL,所以第3行可能不正确,但基本上您希望以关联数组的形式获取all)


这种方法还意味着数据库中“cookies”的任何值都将自动返回,而无需更改PHP代码

只需执行
$cookieCount[$cookies[$key]]=$results[$key]

见下表:

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

$results =  [
    8,
    4,
    1
 ];
 
  $cookieCount = [];
  foreach ($results as $key => $value) {
      $cookieCount[$cookies[$key]] = $results[$key];
  }

    
  return $cookieCount;
输出将是:

排列( [巧克力]=>8 [香草]=>4 [Stracciatella]=>1)


$results[$cookie]=…
“注意:未定义索引:巧克力”@raina77ow“注意:未定义索引:cookies”@Matt感谢重播:)正如我所说,这可能与3号线有关。我不知道您使用的是什么DBAL,所以不确定您需要调用什么fn来获取关联结果谢谢您的重播,但它返回的结果是一样的。its:[8,4,1]@DevsiOdedra@gisem1990您想要哪种类型的输出?“注意:未定义的索引:Chocolate”if->fetch()@DevsiOdedra@gisem1990请访问“谢谢您的重播”,但它返回的内容不变。its:[8,4,1]@u_mulder@gisem1990您不知道自己在做什么,值是[8,4,1],但键是['Chocolate'、'Vanilla'、'Stracciatella'、…],请尝试var_dump()查看。在
foreach
之后会显示什么
打印($results)
?谢谢,这就可以了!但它不返回计数为0的值@卢尼
$cookies = array();
$cookies[] = 'Chocolate';
$cookies[] = 'Vanilla';
$cookies[] = 'Stracciatella';

$results =  [
    8,
    4,
    1
 ];
 
  $cookieCount = [];
  foreach ($results as $key => $value) {
      $cookieCount[$cookies[$key]] = $results[$key];
  }

    
  return $cookieCount;