代码如下$arr = Array
(
[0] => 111
[1] => 222
[2] => 111
[3] => 233
[4] => 123
[5] => 111
[6] => 123
[7] => 111
[8] => 111
[9] => 222
}类似这样的一个数组,我想按照出现最多的顺序来进行数组的重新排列。并去除重复的数字。
(
[0] => 111
[1] => 222
[2] => 111
[3] => 233
[4] => 123
[5] => 111
[6] => 123
[7] => 111
[8] => 111
[9] => 222
}类似这样的一个数组,我想按照出现最多的顺序来进行数组的重新排列。并去除重复的数字。
$arr = Array
(
0 => 111 ,
1 => 222 ,
2 => 111 ,
3 => 233 ,
4 => 123 ,
5 => 111 ,
6 => 123 ,
7 => 111 ,
8 => 111 ,
9 => 222 ,
);
$rs=array();
foreach($arr as $v){
$rs[$v]++;
}
arsort($rs);
$last=array();
foreach ($rs as $key=>$val){
$last[]=$key;
}
print_r($last);//Array ( [0] => 111 [1] => 123 [2] => 222 [3] => 233 )
?>
请问这句话代表什么意思
$arr = array(111, 222, 111, 233, 123, 111, 123, 111, 111, 222);
$arr = array_count_values($arr);
arsort($arr);
$arr = array_flip($arr);
print_r($arr);
?>
#1楼的算法是逐个输出数组里值,每个值在第一次输出的时候以$rs[$v];为键,每当出现一次时,以$rs[$v]++;为键,因为$rs[$v];默认为0,通过这个语句,就实现了原始数组里每个元素的计数,就形成了一个新数组,此数组的键为原数组的值,而值为其出现的次数。
再通过下面的这个(将$rs的键值反过来)foreach ($rs as $key=>$val){
$last[]=$key;
}就输出了楼主所需要的!#1楼是解决方法的之一,楼主还可以想一下有其他的方法
arsort($arr);
$result = array_keys($arr);print_r($result);
//output
Array ( [0] => 111 [1] => 123 [2] => 222 [3] => 233 )