在数组中,我必须找到最常见的对象
$items = array("370","370","546","55");
$value = max($items);
$key = array_search($value, $items);
打印出2和546.
但是如何输出 2 及其相关值,所以在我的示例中 370 ?
答案 0 :(得分:2)
我使用array_count_values
并从结果数组中使用array_keys
来获取最多出现的数字(例如370)和array_values
以获得它出现的次数(例如2)
<?php
$items = [370,370,546,55];
$counted = array_count_values($items);
/*
Array
(
[370] => 2
[546] => 1
[55] => 1
)
*/
$number_appears_most = array_keys($counted);
/*
Array
(
[0] => 370
[1] => 546
[2] => 55
)
*/
$number_of_occurences = array_values($counted);
/*
Array
(
[0] => 2
[1] => 1
[2] => 1
)
*/
echo $number_appears_most[0] . ' appears ' . $number_of_occurences[0] . ' time(s)' . PHP_EOL;
这会给你:
370 appears 2 time(s)
答案 1 :(得分:2)
我带了@alistaircol Idea并且不仅修复了它(因为它依赖于数组的顺序),但我也简化了赋值部分,因此我们没有创建2个新数组
你可以在这里试试
http://sandbox.onlinephpfunctions.com/code/2fe11fb6040dc68db43fb5cbb858ef3e47394dd2
这是代码
$items = [370,370,546,55,55,55];
$counted = array_count_values($items);
arsort($counted); //sort descending maintain keys
$occurences = reset($counted); //get the first value (rewinds internal pointer )
$most_frequent = key($counted); //get the key, as we are rewound it's the first key
echo $most_frequent . ' appears ' . $occurences . ' time(s)' . PHP_EOL;
这正确输出
55 appears 3 time(s)
仅供参考@alistaircol原始答案将无法通过此测试用例
http://sandbox.onlinephpfunctions.com/code/fe13e7a0bd00ea1219bc69e2bc5a5aebaf478034
哪个更改输入数组:
$items = [370,370,546,55];
要:
$items = [370,370,546,55,55,55];
它仍会输出:
370 appears 2 time(s)
在这种情况下,正确答案为55 appears 3 time(s)
这种方式最多的项目是最后一项,它根据顺序公开它(由于使用了第一个索引[0]
,这对我来说很明显)
不要打电话给他,但因为它被接受为答案,我觉得我应该指出这一点。总的来说,虽然我对这个问题采取了合理的态度。所以感谢Kudos。
更新
获得显示超过一次的所有值的一种方法是这样的:
$items = [370,370,546,55,55,55];
$unique = array_unique( $items );
$diff = array_diff_assoc( $items, $unique);
print_r( $diff );
哪个输出
Array
(
[1] => 370
[4] => 55
[5] => 55
)
您可以在此处http://sandbox.onlinephpfunctions.com/code/53df6a8ea7a68768572cfef494e3b715aa13e83b
进行测试有一点需要注意的是,实际存在的情况会少一次。
<强> UPDATE1 强>
我们可以很容易地将这些结合起来并解决缺失的问题。看到这个小提琴来测试
http://sandbox.onlinephpfunctions.com/code/1bc1a30a5e091af3a18fec2c8b48050869108549
代码:
$items = [370,370,546,55,55,55];
$unique = array_unique( $items );
$diff = array_diff_assoc( $items, $unique);
print_r( $diff );
echo "\n\n";
$counted = array_count_values($diff);
arsort($counted); //sort descending maintain keys
$occurences = reset($counted); //get the first value (rewinds internal pointer )
$most_frequent = key($counted); //get the key, as we are rewound it's the first key
echo $most_frequent . ' appears ' . ( $occurences + 1 ) . ' time(s)' . PHP_EOL;
输出(以前的输出)
Array
(
[1] => 370
[4] => 55
[5] => 55
)
55 appears 3 time(s)
哦,如果你想要的那些多于一个没有重复的列表,那么只需使用数组唯一$unique = array_unique($diff);
再次点击它
干杯!
答案 2 :(得分:1)
您可以像这样找到相同的值。
print_r(array_count_values($items));
将输出
Array
(
[370] => 2
[546] => 1
[55] => 1
etc...
)
要得到2和307的价值,你必须在下面做。
$new_arr = array_count_values($items);
$max = max($new_arr);
$new_arr = array_keys($new_arr, max($new_arr)));
echo $new_arr[0]."is repeated (".$max.") times.";
将输出
307 is repeated (2) times.
答案 3 :(得分:1)
$items = [370,370,546,55,55];
$counted = array_count_values($items); // count occurrences
$counted=array_intersect ($counted,[max($counted)]); // only keep elements with highest occurrence
var_export ($counted); // print to screen
答案 4 :(得分:0)
有一个php函数array_count_values
可以在你的情况下工作。
然后你有一个数组,其中包含所有值的计数,你可以对它们进行排序和处理。
https://secure.php.net/manual/en/function.array-count-values.php
$items = array("370","370","546","55");
print_r(array_count_values($items));