【问题标题】:How can I count the number of elements each key holds in an associative array in PHP?如何计算 PHP 关联数组中每个键包含的元素数?
【发布时间】:2017-05-04 03:16:15
【问题描述】:

我正在尝试使用每个键在关联数组中保存的元素数来更新 foreach 循环中的变量 $numberOfFoods。这是我的代码:

$foodsArray = array (
        'France' => ['Souffle' , 'Baguette' , 'Fois gras'],
        'England' => ['Bangers and mash' , 'Tea and biscuits'],
        'America' => ['Hamburger', 'Steak and Eggs', 'Texas chili']
    );
    $countriesByCuisine = array();       

    foreach ($foodsArray as $originCountry => $countryAssocFood) {
        $numberOfFoods = count(array_values($foodsArray));
        for ($countryAssocFoodIndex = 0; $countryAssocFoodIndex < $numberOfFoods; $countryAssocFoodIndex++) {
            $countriesByCuisine[$countryAssocFood[$countryAssocFoodIndex]] = $originCountry;
        }
    }

    foreach (array_keys($countriesByCuisine) as $foodFromCountry) {
        echo $foodFromCountry . ', From '  . $countriesByCuisine[$foodFromCountry] . '. ';
    }

实际上,这段代码只是将$numberOfFoods 变量设置为整数3,而不是更新数字以反映当前键所持有的值的数量。我对这段代码的总体目标是学习如何转换数组,使值成为新数组中的键,这些键将它们以前的键作为值。请原谅我乱七八糟的代码,因为我对编程和 PHP 还很陌生。

【问题讨论】:

  • array_flip 会为你做这些
  • 你能举个例子说明你希望结果是什么样的吗?

标签: php arrays foreach associative-array


【解决方案1】:

@Robbie Averill 对 array_flip 的看法是正确的,以实现您翻转键和值的“总体目标”。

有多种更有效的方法可以修复您当前的代码,最好的方法可能是array_map,但我也想向您提供当前代码失败的原因:

问题是您每次迭代都在计算$foodsArray(它总是等于3),而不是计算$countryAssocFood

$numberOfFoods = count(array_values($countryAssocFood));

【讨论】:

  • 这不是我从他提出问题的方式中所理解的。他首先说出他想做什么(在 foreach 循环中使用每个键所包含的元素数更新变量 $numberOfFoods),然后显示代码,然后说当前执行(此代码只是设置 $numberOfFoods 变量为整数 3)。在我看来,修复计数是他想要的。如果不是,他总是可以忽略我的回答。
  • :D 我们不是他想要的
  • 感谢您的回复。澄清一下,分配$numberOfFoods = count(array_values($countryAssocFood)); 确实完成了我正在寻找的更改。我没想到我正在使用分配给每个键的数组,所以我什至没有考虑在$countryAssocFood 上使用array_values 函数。我也有兴趣了解 array_flip 是否具有相同的结果,因为我在决定学习如何迭代地转换数组之前考虑过使用它。在此期间,我会搞砸它和 array_map。
  • 如果它证明@Chinito 有任何关闭,你是正确的,我已经理解我的计数方法的问题,但我的问题是我没有看到答案是一个相对明显的变化我对array_values的使用。
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2021-05-14
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多