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): true

Bu işlev kullanıcı tarafından sağlanmış bir karşılaştırma işlevini kullanarak diziyi "değerlerine" göre sıralar.

Bilginize:

İki üye karşılaştırıldığında eşitse bunların özgün sıralamadaki yerleri korunur. PHP 8.0.0 öncesinde sıralı dizideki göreli yerleri tanımsızdı.

Bilginize: Bu işlev dizi elemanlarına yeni anahtarlar atar. Anahtarları yeniden düzenlemek yerine evvelce atanmış anahtarları silecektir.

Bağımsız Değişkenler

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, geri çağırım işlevinin dönüş değerinin dahili olarak int türüne dönüştürülmesiyle sonuçlanır. Bu nedenle 0.99 ve 0.1 gibi değerlerin her ikisi de 0 tamsayı değerine dönüştürüp bunlar eşit değerler olarak karşılaştırılacaktır.

Dönen Değerler

Daima true döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
8.2.0 Dönüş türü artık true;evvelce, bool idi.
8.0.0 Eğer işleve bağımsız değişkenlerinden biri gönderimli aktarılıyorsa, bu artık E_WARNING seviyesinde bir uyarıya sebep oluyor.

Örnekler

Ö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

Dahili karşılaştırmayı daha da basitleştirmek için mekik işleci kullanılabilir.

<?php
function cmp($a, $b)
{
return
$a <=> $b;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach (
$a as $key => $value) {
echo
"$key: $value\n";
}
?>

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");

foreach (
$meyvalar as $anah => $değer) {
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 {
private
string $isim;

function
__construct($isim)
{
$this->isim = $isim;
}


static function nesne_karşılaştır($a, $b)
{
return
strtolower($a->name) <=> strtolower($b->name);
}
}

$a[] = new Deneme("c");
$a[] = new Deneme("b");
$a[] = new Deneme("d");

usort($a, [Deneme::class, "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

Örnek 5 - Mekik işleci kullanılan usort() örneği

Mekik işleci, bileşik değerlerin doğrudan çok yönlü karşılaştırılmasını sağlar. Aşağıdaki örnekte, $people önce soyadına göre, ardından soyadı eşleşirse ada göre sıralayacaktır.

<?php
$people
[0] = ['first' => 'Adam', 'last' => 'West'];
$people[1] = ['first' => 'Alec', 'last' => 'Baldwin'];
$people[2] = ['first' => 'Adam', 'last' => 'Baldwin'];

function
sorter(array $a, array $b) {
return [
$a['last'], $a['first']] <=> [$b['last'], $b['first']];
}

usort($people, 'sorter');

foreach (
$people as $person) {
print
$person['last'] . ', ' . $person['first'] . PHP_EOL;
}
?>

Yukarıdaki örneğin çıktısı:

Baldwin, Adam Baldwin, Alec West, Adam

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
  • uksort() - Bir diziyi kullanıcı tanımlı bir işlev kullanarak anahtarlarına göre sıralar
  • Dizilerde Sıralama
To Top