usort

(PHP 4, PHP 5, PHP 7, PHP 8)

usortBir diziyi kullanıcı tanımlı bir işlev kullanarak değerlerine göre sıralar

Açıklama

usort ( array &$array , callable $karş_işlevi ) : bool

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.

Değiştirgeler

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.

callback ( mixed $a, mixed $b ) : int
Dikkat

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.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Örnekler

Örnek 1 - usort() örneği

<?php
function cmp($a$b)
{
    if (
$a == $b) {
        return 
0;
    }
    return (
$a $b) ? -1;
}

$a = array(32561);

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;
    }
}

$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($arraybuild_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

Ayrıca Bakınız

  • uasort() - Bir diziyi kullanıcı tanımlı bir işlev kullanarak indislerine göre sıralarken anahtar/değer ilişkisini korur
  • Dizilerde Sıralama