Sortowanie tablicy po długości elementu
Oto prosty sposób na sortowanie tablicy względem wielkości elementów (ilości liter w jednym elemencie).
Wszystko robimy za pomocą funkcji usort(), która jako swój pierwszy parametr przyjmuje tablicę, a jako drugi funkcję zwrotną, która posłuży do sortowania.
Najprościej można to zrobić tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function cmp ($left, $right) { //żeby uzyskać odwrotne sortowanie należy: //$diff = strlen ($right) - strlen ($left); $diff = strlen ($left) - strlen ($right); if (!$diff) { return strcmp ($left, $right); } return $diff; } $a = array('asfasfafasfa','sddd','dasdas','asd'); usort ($a, 'cmp'); foreach ($a as $item) { print $item . "<br />"; } /* na wyjściu otrzymujemy tablicę posortowaną od najmniejszego do największego elementu Array ( [0] => asd [1] => sddd [2] => dasdas [3] => asfasfafasfa ) */ |
To bardzo prosty i wygodny sposób.
Można jeszcze napisać prostą klasę do sortowania, na wyjściu otrzymujemy wtedy tablicę obiektów (którą możemy prze iterować wedle potrzeb).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | class ArrSort { public $name; public function __construct($name) { $this->name = $name; } public function cmp($left, $right) { $diff = strlen ($left->name) - strlen ($right->name); if (!$diff) { return strcmp ($left, $right); } return $diff; } } $aa = array('asfasfafasfa','sddd','dasdas','asd'); //tworzymy tablicę obiektów potrzebną do sortowania foreach($aa as $bb) { $cc[] = new ArrSort($bb); } uasort($cc, array("ArrSort", "cmp")); /* Array ( [3] => ArrSort Object ( [name] => asd ) [1] => ArrSort Object ( [name] => sddd ) [2] => ArrSort Object ( [name] => dasdas ) [0] => ArrSort Object ( [name] => asfasfafasfa ) ) */ //tablicę można stworzyć też tak: $a[] = new ArrSort("csdsaewrwfewewfsd"); $a[] = new ArrSort("basdasdas"); $a[] = new ArrSort("dasdasdasdasdas"); uasort($a, array("ArrSort", "cmp")); foreach ($a as $item) { print $item->name . "<br />"; } |
Powiązane wpisy: