2012-08-23 29 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