array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.usort.php', 1 => 'usort', ), 'up' => array ( 0 => 'ref.array.php', 1 => 'Dizi İşlevleri', ), 'prev' => array ( 0 => 'function.uksort.php', 1 => 'uksort', ), 'next' => array ( 0 => 'book.classobj.php', 1 => 'Classobj', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/array/functions/usort.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(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.
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.
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, 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.
Daima true
döndürür.
Sürüm: | Açıklama |
---|---|
8.2.0 |
Dönüş türü artık true ;evvelce, bool idi.
|
8.0.0 |
Eğer işlev e bağımsız değişkenlerinden biri gönderimli
aktarılıyorsa, bu artık E_WARNING seviyesinde
bir uyarıya sebep oluyor.
|
Ö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;
}
/* Duruk karşılaştırma işlevi: */
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