Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最后计算相同的值_Php_Arrays - Fatal编程技术网

Php 最后计算相同的值

Php 最后计算相同的值,php,arrays,Php,Arrays,我有一个数组: $array = array(1,1,5,2,3,3,3,3); 我需要找到一种方法来计算一个数字在数组末尾重复的次数。在这种情况下,数字3重复4次 如果…: $array = array(1,1,5,2,3,3,3,3,4); 在这种情况下,结果将是1,因为数字4只出现一次 谢谢你的帮助。试试这个:() 你不能从数组的末尾开始,数到第一个不匹配的数字吗?你的问题不清楚。先让我们看看你的尝试。让我们看看你尝试了什么。谢谢,它成功了。如果数组中的值超过5000个,这不会太慢?它

我有一个数组:

$array = array(1,1,5,2,3,3,3,3);
我需要找到一种方法来计算一个数字在数组末尾重复的次数。在这种情况下,数字3重复4次

如果…:

$array = array(1,1,5,2,3,3,3,3,4);
在这种情况下,结果将是1,因为数字4只出现一次

谢谢你的帮助。

试试这个:()


你不能从数组的末尾开始,数到第一个不匹配的数字吗?你的问题不清楚。先让我们看看你的尝试。让我们看看你尝试了什么。谢谢,它成功了。如果数组中的值超过5000个,这不会太慢?它只会与最后匹配值的长度一样长。。(i
break
在找到不匹配的值时将其删除)如果有5000个值,但只有最后5个匹配,则速度会非常快。。另外,5000也不是很多。如果对值进行了排序,则可以使用二进制搜索。这将使您的搜索时间为O(logN),而不是上述的O(N)方法。基本上从结束值开始,作为二进制搜索分区的右端,从数组的中间值开始,作为二进制搜索分区的左端。这样,您就可以在O(logN)时间内从一开始就找到3的第一次出现。
$array = array(1,1,5,2,3,3,3,3);
$num = end($array); // this will be 3 - the value to compare to
$count = 0; // init count

for($i = sizeof($array)-1; $i>=0;$i--) // loop from the end backwards
    if($array[$i]==$num) // if this is the correct num
        $count++; // increase count
    else
        break; // end loop - not side by side anymore - no reason to keep looping

echo $count; // print the result