在 php 中按值排序數(shù)組,同時保留鍵名的方法是:使用 usort() 函數(shù)按值排序數(shù)組。向 usort() 函數(shù)傳遞一個匿名函數(shù)作為比較函數(shù),該函數(shù)返回元素值的差值。usort() 會根據(jù)匿名函數(shù)對數(shù)組進行排序,同時保持鍵名不變。
如何在 PHP 中按值排序數(shù)組并保留鍵名?
在 PHP 中,可以使用 asort()
函數(shù)根據(jù)值對數(shù)組進行升序排序,或使用 arsort()
函數(shù)進行降序排序。但是,這兩個函數(shù)都會破壞數(shù)組中的鍵名。
如果要按值排序數(shù)組,同時保持鍵名,可以使用 usort()
函數(shù),如下所示:
$arr = array( 'a' => 10, 'b' => 5, 'c' => 20 ); usort($arr, function($a, $b) { return $a - $b; }); print_r($arr);
登錄后復(fù)制
輸出:
Array ( [b] => 5 [a] => 10 [c] => 20 )
登錄后復(fù)制
在上面的代碼中:
usort()
接受兩個參數(shù):要排序的數(shù)組 $arr
和一個用于比較元素值的匿名函數(shù)。匿名函數(shù)接收兩個元素 $a
和 $b
,并返回它們的差值。usort()
會對數(shù)組中的元素進行排序,使用匿名函數(shù)作為比較函數(shù)。經(jīng)過排序后,數(shù)組中的鍵名保持不變。
實戰(zhàn)案例
考慮一個包含學(xué)生成績的數(shù)組:
$students = array( 'John' => 90, 'Jane' => 85, 'Peter' => 95 );
登錄后復(fù)制
要按成績升序排列學(xué)生姓名,同時保持姓名作為鍵名,可以使用以下代碼:
usort($students, function($a, $b) { return $a - $b; });
登錄后復(fù)制
輸出:
Array ( [Jane] => 85 [John] => 90 [Peter] => 95 )
登錄后復(fù)制