2012-08-23 22 views
0

我有一个mysql记录数组在$ allrecords变量。根据它们的出现次序排列项目desc在php

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

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

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 


     ) 


) 
+0

你将它存储在数据库中的'奔驰(5)'? – zerkms

+2

如果您从数据库中获取该数据,请使数据库进行排序。 –

+0

@MarcB我需要它在数据库外面进行各种用途 – Derfder

回答

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); 
+0

它给了我一些像Array([0] => 8);( – Derfder

+0

sry,这是晚了;) - >编辑 – TheHe

+0

但你说“type”是你想要检查的属性 - 在你的模型中它是“名称”? 也许你必须改变行“$ type = ...”做适当的值。 函数用数组中的“array-keys => count”关系对它们进行计数,对它进行关联排序,“array_keys”按照正确的顺序提取出单词... – TheHe

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

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

+0

嗯,它不工作。我尝试了usort($ allrecords,function($ a,$ b){return $ a-> type> = $ b-> type;});但没有出现 – Derfder

+0

你应该给我们数组的实际数据格式(查询结果)... – TheHe

+0

好的,我将编辑帖子 – Derfder

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

它不工作;( – Derfder

0

AAAAH我没有懂吗!!!

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

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

我需要它在PHP – Derfder

+0

好吧,分组在php ... sec;) – TheHe