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计算变量值出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

离开方法时如何保存变量值?

PHP变量名、变量值、类型

如何更改 PHP 中的静态变量值?

将变量值从 JS 传递给 PHP

PHP 获取.htaccess变量值

为啥 SQL Server 标量值函数变慢?