PHP: değerlerinden uzunluğu bir diziyi sıralar?

5 Cevap php

Ben bir anagram makine yaptı ve ben olumlu maçları bir dizi var. Sorun ben uzun Dizi değerleri ilk görünecek şekilde diziyi sıralamak mümkün olmak istiyorum, farklı bir sırayla tüm olmasıdır.

Herkes bu yapmak konusunda herhangi bir fikir var mı?

5 Cevap

Kullan http://us2.php.net/manual/en/function.usort.php

Bu özel bir işlevle

function sort($a,$b){
    return strlen($b)-strlen($a);
}

usort($array,'sort');

Eğer umurumda değil usort kullanmak, eski dizinleri tutmak istiyorsanız uasort kullanın.

Ayrıca, ben usort kararsız bir tür çünkü benim versiyon daha iyi olduğuna inanıyorum.

$array = array("bbbbb", "dog", "cat", "aaa", "aaaa");
// mine
[0] => bbbbb
[1] => aaaa
[2] => aaa
[3] => cat
[4] => dog

// others
[0] => bbbbb
[1] => aaaa
[2] => dog
[3] => aaa
[4] => cat

Bunu PHP 5.3 şekilde yapmak istiyorsanız, böyle bir şey yaratmak isteyebilirsiniz:

usort($array, function($a, $b) {
    return strlen($b) - strlen($a);
});

Bu şekilde global ad kirletmez olacaktır.

Ama KURU şeyleri tutmak için kaynak kodu tek bir yerde yalnızca ihtiyacınız varsa bunu.

strlen oyur dizi elemanlarının bir dizi yapmak, ve multisort bunu senin dizi.

foreach($Yourarray as $c=>$key) {               
    $key['maxlen'] = strlen($key);  
    $sort_numcie[] = $key['maxlen'];
}

array_multisort($sort_numcie, $Yourarray);  

Bu kesinlikle çalışacaktır. Ben eminim!

İşte ben geçmişte bunu yaptık bir yoldur.

// Here's the sorting...
$array = array_combine($words, array_map('strlen', $words));
arsort($array);

Bu basit.

function LSort(a,b){return a.length-b.length;}

var YourArray=[[1,2,3,4,5,6], ['a','b'], ['X','Y','Z'], ['I','Love','You'], ['good man']];

YourArray.sort(Lsort);

Sonuç:

['good man'] Length=1
['a','b'] Length=3
['X','Y','Z'] Length=3
['I','Love','You'] Length=3
[1,2,3,4,5,6] Length=6