(PHP 4, PHP 5)
usort — Bir diziyi kullanıcı tanımlı bir işlev kullanarak değerlerine göre sıralar
Bu işlev kullanıcı tarafından sağlanmış bir karşılaştırma işlevini kullanarak diziyi değerlerine göre sıralar. Sıralamak istediğiniz diziyi mevcut kuralların dışında bir kurala göre sıralamak isterseniz bu işlev çok işe yarar.
Bilginize:
Karşılaştırma sırasında birbirinin eşi iki üye bulunursa aralarındaki sıralamanın nasıl olacağı belirsizdir.
Bilginize: Bu işlev dizi elemanlarına yeni anahtarlar atar. Anahtarları yeniden düzenlemek yerine evvelce atanmış anahtarları silecektir.
Sıralanacak dizi.
Karşılaştırma için geriçağırım işlevi.
karş_işlevi dizi değerlerinin aktarılacağı iki değiştirge kabul etmelidir. Birinci değiştirgenin ikinciden büyük, küçük veya ona eşit olduğu durumlarda sırayla sıfırdan büyük, sıfırdan küçük bir değer veya sıfır döndürmelidir.
Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
Sürüm: | Açıklama |
---|---|
4.1.0 | Yeni sıralama algoritması devreye girdi. karş_işlevi karşılaştırıldıklarında eşit olan elemanların özgün sırasını korumuyor. |
Örnek 1 - usort() örneği
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $anahtar => $değer) {
echo "$anahtar: $değer\n";
}
?>
Yukarıdaki örneğin çıktısı:
0: 1 1: 2 2: 3 3: 5 4: 6
Bilginize:
Açıkçası, bu örnek için sort() işlevi daha uygun olurdu.
Örnek 2 - usort() ve çok boyutlu dizi
<?php
function karşılaştır($a, $b)
{
return strcmp($a["meyva"], $b["meyva"]);
}
$meyvalar[0]["meyva"] = "mandalina";
$meyvalar[1]["meyva"] = "limon";
$meyvalar[2]["meyva"] = "portakal";
usort($meyvalar, "karşılaştır");
while (list($anah, $değer) = each($meyvalar)) {
echo "\$meyvalar[$anah]: " . $değer["meyva"] . "\n";
}
?>
Bir çok boyutlu dizi sıralanırken $a ve $b dizinin ilk indisine gönderimleri içerir.
Yukarıdaki örneğin çıktısı:
$meyvalar[0]: limon $meyvalar[1]: mandalina $meyvalar[2]: portakal
Örnek 3 - Bir nesnenin üye yöntemini kullanan usort() örneği
<?php
class Deneme {
var $isim;
function Deneme($isim)
{
$this->isim = $isim;
}
/* Duruk karşılaştırma işlevi: */
static function nesne_karşılaştır($a, $b)
{
$al = strtolower($a->isim);
$bl = strtolower($b->isim);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new Deneme("c");
$a[] = new Deneme("b");
$a[] = new Deneme("d");
usort($a, array("Deneme", "nesne_karşılaştır"));
foreach ($a as $öğe) {
echo $öğe->isim . "\n";
}
?>
Yukarıdaki örneğin çıktısı:
b c d