Yeniden indeksleme olmadan dizinin sayısal değerleri sıralama (PHP)

4 Cevap php

Ne yapıyorum şudur:

  • Ben DB kimliği değerleri (sayısal) bir listesini almak ve bir diziye saklamak (1, 2, 2, ...)
  • Sonra array_count_değers ile çiftleri saymak. Bu çıkışlar ([1] => 1 [2] => 2, ...)
  • Daha sonra sayım yoluyla azalan sırayla diziyi yeniden sıralamak istiyorum
  • Ben o zaman sadece array_keys($array) sayım sıralı liste kimlikleri almak için kullanabilirsiniz.

Bir kez benzer bir işlev için array_multisort kullanılabilir, ancak bu durumda, anahtarlar ('a' => 2) dizeleri idi. Sorun şimdi sayım değerini tutan tuşlar sayısal kimlikleri çünkü ben 1, 2, 3 Sayısal tuşları ve MULTISORT yeniden indeksleri tuşlarını kullanarak olmam. Bu ders vida amacı Çünkü ben artık bir şey tespit edemez ..

Her neyse, burada kabaca şimdi ne yapıyorum:

$array = array(3, 1, 2, 3, 2, 3);
// count the IDs [0]=>3, [1]=>1, [2]=>2

$count = array_count_değers($array);

// sort and screw up the id's: [0]=>3 [1]=>1 [2]=>2
array_multisort($count);

Bir şey bu yaklaşmanın daha iyi bir yolu var olduğunu söylüyor?

4 Cevap

Try asort instead of array_multisort bu özgün dizin ilişkiyi korur gibi.

İlk cümleden itibaren tahmin:

Ben DB kimliği değerleri (sayısal) bir listesini almak ve bir diziye saklamak (1, 2, 2, ...)

belki de, böyle bir şey sorgulamak iken sıralama yapabiliriz:

SELECT id, COUNT(id) AS quantity FROM table GROUP BY id ORDER BY quantity DESC

Neden php ile yapmak gerekiyor? Sana doğru sonuçları vermek için SQL deyimini değiştirmek. gibi bir şey

select ID, count(another_col) as occurrence
from table
group by ID
sort by occurrence

Doğru SQL sözdizimi için bakınız http://www.techonthenet.com/sql/group_by.php

edit: ups sıralama kriterleri kaçırdı. Bu oluşum tarafından değil KODU olmalı

Diğerleri de söylediğim gibi veritabanından kriteri veri alabilirsiniz eğer, daha iyi olabilir. Sen, düzeni tersine PHP ve muhtaç bunu kullanmak istiyorsanız [arsort][1].