在php中基于它们的出现desc对数组项进行排序

时间:2012-08-23 05:22:15

标签: php arrays

我在 $ allrecords 变量中有一系列mysql记录。

每条记录有多个键,其中一个键称为类型

某些变量具有相同的类型。

E.g。它看起来像这样:

Seat
Mercedes
BMW
BMW
Mercedes
Audi
Mercedes
Fiat
Mercedes
Audi
Fiat
Mercedes

现在这个数组是无序的(只是从数据库中获取),现在我需要从最常出现的数组中排序数组项。

E.g。像这样

Mercedes (5)
Audi (3)
BMW (2)
Fiat (2)
Seat (1)

我不需要数字(我使用另一个foreach循环),所以我需要它就像这样:

Mercedes
Audi
BMW
Fiat
Seat

如何在PHP中执行此操作?可能吗?我需要根据类型对项目进行分组,然后从最常见到最少的顺序对它们进行排序。

提前致谢。

修改: 我的数组看起来像这样:

Array
(
    [0] => stdClass Object
        (
            [id] => 125
            [user_id] => 29
            [show] => 1
            [state] => 1
            [type] => 23
            [subcat_id] => 11
            [category_id] => 2
            [name] => SLK 350


        )


)

4 个答案:

答案 0 :(得分:1)

<?php

$groups = array();
foreach($allrecords as $record){
    $type = $record->type;
    if(empty($groups[$type]))
        $groups[$type] = 1;
    else
        $groups[$type]++;
}

asort ($groups);
$cars = array_keys($groups);
print_r($cars);

答案 1 :(得分:0)

usort($allrecords, function($a, $b){ return $a->count >= $b->count; });

其中“count”是属性的名称......

答案 2 :(得分:0)

var_dump(str_word_count(implode(" ", $all_records))); // Returns array( "Mercedes" => 5 ... )

答案 3 :(得分:0)

aaaah我没有得到那个!!!

你应该用SQL来实现这个!!!

SELECT type, COUNT(1) FROM cars GROUP BY type;