Autor Zpráva
Trsak
Profil
Zdravím,
mám například následující objekt:
array (3)
  0 => stdClass #1145
    name => "Useear" (6)
    parent => "Admin" (5)
  1 => stdClass #32cc
    name => "__User164" (8)
    parent => "Moderator" (5)
  2 => stdClass #54a3
    name => "User165" (9)
    parent => "Admin" (7)

A potřeboval bych to vše seřadit tak, aby prvně byly parent = Admin, pak parent = Moderator a nakonec parent = User, ..

Jak na to? Zkoušel jsem následující:

$col  = 'parent';
$sort = array();
foreach ($admins as $i => $obj) {
  $sort[$i] = $obj->{$col};
}

array_multisort($sort, SORT_ASC, $admins);

Ale to seřadí podle parent abecedně
juriad
Profil
Jednoduše takto:
usort($pole, function($a, $b) {return strcmp($a->parent, $b->parent);});
Ale abecedně je přece chceš seřadit (podle parenta). Admin je v abecedě dříve než Moderator a ten než User.
Trsak
Profil
To byl jen příklad, mám tam více parentů a abecedně to nevychází.
juriad
Profil
Aha, v tom případě zkus třeba:
usort($pole, function($a, $b) {
  $parents = array_flip(array('Admin', 'Moderator', 'User')); # toto každému parentovi přidějí číslo (uveď je v žádaném pořadí)
  return strcmp($parents[$a->parent], $parents[$b->parent]);
});
Případně, ať se nemusí pole parentů pořád počítat:
$parents = array_flip(array('Admin', 'Moderator', 'User')); # toto každému parentovi přidějí číslo (uveď je v žádaném pořadí)
usort($pole, function($a, $b) use ($parents) {
  return strcmp($parents[$a->parent], $parents[$b->parent]);
});
Trsak
Profil
Super! Díky moc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: