(PHP 4, PHP 5, PHP 7, PHP 8)
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:
İki üye karşılaştırıldığında eşitse bunların sıralı dizi içindeki göreli sırası tanımsızdır.
Bilginize: Bu işlev dizi elemanlarına yeni anahtarlar atar. Anahtarları yeniden düzenlemek yerine evvelce atanmış anahtarları silecektir.
dizi
Sıralanacak dizi.
karş_işlevi
Karşılaştırma işlevinin, ilk bileşeninin ikinci bileşenden küçük, eşit veya büyük olması durumunda sıfırdan küçük, eşit veya büyük bir tamsayı döndürmesi gerekir.
Karşılaştırma işlevinden float gibi tamsayı olmayan değerlerin döndürülmesi, dahili bir çarpıtma ile bu değerin int türüne dönüştürülmesine sebep olur. Örneğin, 0.99 ve 0.1 gibi değerler tamsayı 0 değerine dönüştürülür.
Başarı durumunda true
, başarısızlık durumunda false
döner.
Ö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
Örnek 4 - Çok boyutlu bir diziyi sıralamak için anonim işlevler kullanılan usort() örneği
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
Yukarıdaki örneğin çıktısı:
y, a x, b z, c