PHP计算变量值出现的次数
Posted
技术标签:
【中文标题】PHP计算变量值出现的次数【英文标题】:PHP count the number of occurances of values of a variable 【发布时间】:2022-01-18 22:47:18 【问题描述】:这与 php 中的计数有关,并且有很多问题和示例,但我找不到我需要做的事情:计算变量值的出现次数和算作它的输出自己的变量。
我想作为变量计数和输出的值是 50 个状态的两个字母缩写中的每一个,即 AL、AK AR...;它们包含在$state
中。
计算每个状态的出现次数并将每个状态输出为变量(即$AL_total
和$AK_total
和$AR_total
等)的最有效方法是什么?
// I have data in the format
// firstname\n lastname \naddress \ncity \nstate \nzip
// This explode strings into array
foreach($values as $val)
$valuearray = explode("\n", implode($val));
// This assigns variables that are used to echo each field of data
$firstname = $valuearray[0];
$lastname = $valuearray[1];
$address = $valuearray[2];
$city = $valuearray[3];
$state = $valuearray[4];
$zip = $valuearray[5];
// count $state and output as $AL_total , $AK_total , $AR_total , etc.
// And then...
echo $AL_total;
etc....
【问题讨论】:
array_count_values() ? 啊哈,我想这就是我需要的:) 【参考方案1】:这可能是基于您的初始要求的一种方法:
#inside the loop
$states[$state] = null;
if (!isset($$state . '_total'))
$$state . '_total' = 1;
else
$$state . '_total' += 1;
然后:
#after the loop
foreach ($states as $state => $_null)
echo "Total ".$state." = ".$$state . '_total'."\n";
如果你想输出一个你知道的特定状态:
#after the loop
echo "Total AL = ".((isset($AL_total)) ? $AL_total : 0);
你可以看到它在运行here
如果您更喜欢使用 array_count_values() 函数(由 @nice_dev 评论)获取单个数组,请执行以下操作:
#inside the loop
$states_count[] = $state;
然后:
#after the loop
$count_by_state = array_count_values($states_count);
print_r($count_by_state);
echo "Total AL = ".(isset($count_by_state['AL']) ? $count_by_state['AL'] : 0);
将输出如下内容:
Array
(
[AN] => 1
[AK] => 5
[AR] => 5
[AL] => 4
)
Total AL = 4
你可以看到它在运行here
【讨论】:
谢谢,这很有趣,而且有效。 nice_dev 指出了 array_count_values() 的可能用途。那会更容易吗? @BlueDogRanch:这取决于您要如何管理它们。首先,我按照您在初始帖子中要求的方式进行了操作。现在我添加了array_count_values()
函数,它将生成一个数组,其中包含您可以通过$count_by_state[state]
而不是$state_total
vars 访问的所有值。如你所愿。当然,array_count_values()
解决方案看起来比其他解决方案更好、更干净。
谢谢!使用 array_count_values 对我来说效果更好;第一个示例由于某种原因杀死了我的循环。而且它似乎更有效率。
啊,Warning: Undefined array key "AL"
当 AL 为 0 时,我猜。我们echo "Total AL = ".$count_by_state['AL'];
时是否需要检查key是否存在?
@BlueDogRanch:我已经编辑了我的答案并添加了数组验证。还更新了链接以再次测试。【参考方案2】:
我建议使用关联数组,其中键是状态,值是计数,例如:
# before your loop:
$stateCount = [];
# in your loop:
if( ! isset( $stateCount[$state] ) ) # first time $state is seen, init to 1
$stateCount[$state] = 1;
else
$stateCount[$state]++;
【讨论】:
nice_dev 指出了可能使用 array_count_values()。那会更容易吗? imo,使用array_count_values
这很有趣。如何输出总和,即 AL?是echo $al
吗?
我建议阅读一下关联数组在 PHP 中的工作原理:php.net/manual/en/language.types.array.php。要访问 AL,您可以使用 echo $stateCount['AL'];
以上是关于PHP计算变量值出现的次数的主要内容,如果未能解决你的问题,请参考以下文章