Home > PHP > Sortowanie tablicy po długości elementu

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:

  1. Brak komentarzy
  1. Brak jeszcze trackbacków

agencja reklamowa lublin ślub i wesele senniki