Patricio Nicolas Asked: 2020-11-03 19:29:02 +0800 CST 2020-11-03 19:29:02 +0800 CST 2020-11-03 19:29:02 +0800 CST 用php计算一个元素在数组中重复的次数 772 是否有一个函数php可以返回元素在 ? 内重复的次数array。如果没有,我将不得不遍历每个元素并使用计数器来查看它重复了多少次。 类似的东西,比如count()具有Python. 该程序的输出将是 2,因为它在array. php 4 Answers Voted Best Answer sioesi 2020-11-03T19:38:58+08:002020-11-03T19:38:58+08:00 与功能array_count_values $valores = array_count_values($array); 给你的答案是多少个数,重复多少次 Array ( [1] => 2 [2] => 2 [3] => 1 ) ESL 2020-11-03T22:23:52+08:002020-11-03T22:23:52+08:00 我看到两个选项,用逗号或引号搜索值没有问题。 第一个选项是@sioesi和@alvaro-montoro提到的选项,因为它是原生的,它可能非常快。在这种情况下,您必须小心,因为如果该值不存在,您将找不到它: <?php function contar_valores($a,$buscado) { if(!is_array($a)) return NULL; $v=array_count_values($a); return array_key_exists($buscado,$a)?$v[$buscado]:0; } 但是,是的,如果您对比较单个值感兴趣,它会在内存中创建一个数组,每个唯一值都有一个元素。例如,array(1,2,3,4,5,6,7,8,9,10,1)长度为 11 的 ,生成另外 10 个长度的元素: array( [1]=>2, [2]=>1, [3]=>1, [4]=>1, [5]=>1, [6]=>1, [7]=>1, [8]=>1, [9]=>1, [10]=>1, ) 使用这些数量应该没有问题,但是如果您处理长数组,它会消耗大量内存,因为您创建了一个类似大小的数组。 相反,如果您尝试计算单个值,则更容易循环遍历数组并比较每个值,使用foreach. 如果您确定它$a是一个数组,则可以在一行(2 条指令)中完成:$i=0;foreach($a as $v) if($buscado===$v) $i++; 如果你想要它作为一个函数,你可以执行以下操作: <?php function contar_valores($a,$buscado) { if(!is_array($a)) return NULL; $i=0; foreach($a as $v) if($buscado===$v) $i++; return $i; } 因此,它在内存管理方面应该更有效,因为它只创建一个数字变量。 Alvaro Montoro 2020-11-03T19:39:29+08:002020-11-03T19:39:29+08:00 没有函数可以准确返回特定值出现的次数,但您可以使用该函数array_count_values来计算数组中所有数据出现的次数。 从那里您可以创建自己的函数: function cuenta_veces_valor($array, $valor) { $contadores = array_count_values($array); return $contadores[$valor]; } 尽管我想,除非您需要计算多个元素,否则它可能有点过分。 Roberto Sepúlveda Bravo 2020-11-03T19:49:55+08:002020-11-03T19:49:55+08:00 尝试这个: $arr = array('amigo','Hola','amigo','amigo','samigo','amigos','que','tal','tal','tal','amigo'); $str = ", " . implode(", ",$arr) . ","; $count = substr_count($str, ' amigo,'); echo $str."<br>"; echo $count; 基本上我们将数组传递给字符串,然后 substr_count() 为我们完成这项工作,您会看到输出为“3”,因为“朋友”一词在您的数组中出现了 3 次。 请注意,'amigo,'相等的元素将添加+1到$count,因为它的末尾有一个逗号,但您不想计算它,因为它与没有逗号的 'friend' 元素不同。 请注意,如果您处理大量数据(将所有数据复制到字符串中),这可能会导致内存效率低下。
与功能
array_count_values
给你的答案是多少个数,重复多少次
我看到两个选项,用逗号或引号搜索值没有问题。
第一个选项是@sioesi和@alvaro-montoro提到的选项,因为它是原生的,它可能非常快。在这种情况下,您必须小心,因为如果该值不存在,您将找不到它:
但是,是的,如果您对比较单个值感兴趣,它会在内存中创建一个数组,每个唯一值都有一个元素。例如,
array(1,2,3,4,5,6,7,8,9,10,1)
长度为 11 的 ,生成另外 10 个长度的元素:使用这些数量应该没有问题,但是如果您处理长数组,它会消耗大量内存,因为您创建了一个类似大小的数组。
相反,如果您尝试计算单个值,则更容易循环遍历数组并比较每个值,使用
foreach
. 如果您确定它$a
是一个数组,则可以在一行(2 条指令)中完成:$i=0;foreach($a as $v) if($buscado===$v) $i++;
如果你想要它作为一个函数,你可以执行以下操作:
因此,它在内存管理方面应该更有效,因为它只创建一个数字变量。
没有函数可以准确返回特定值出现的次数,但您可以使用该函数
array_count_values
来计算数组中所有数据出现的次数。从那里您可以创建自己的函数:
尽管我想,除非您需要计算多个元素,否则它可能有点过分。
尝试这个:
基本上我们将数组传递给字符串,然后 substr_count() 为我们完成这项工作,您会看到输出为“3”,因为“朋友”一词在您的数组中出现了 3 次。
请注意,
'amigo,'
相等的元素将添加+1
到$count
,因为它的末尾有一个逗号,但您不想计算它,因为它与没有逗号的 'friend' 元素不同。请注意,如果您处理大量数据(将所有数据复制到字符串中),这可能会导致内存效率低下。