我有一個多維數組。最有效的方式來按子元素排列數組?
$array[0] = array(1, 8, 2);
$array[1] = array(5, 6, 15);
$array[2] = array(-8, 2, 1025);
我想知道什麼是最有效的方式,通過它的特定屬性訂購父陣列的子排列。例如,我想把它們按$ sub_array [1]的升序排列,所以父數組將被排序爲2,1,0。
我有一個多維數組。最有效的方式來按子元素排列數組?
$array[0] = array(1, 8, 2);
$array[1] = array(5, 6, 15);
$array[2] = array(-8, 2, 1025);
我想知道什麼是最有效的方式,通過它的特定屬性訂購父陣列的子排列。例如,我想把它們按$ sub_array [1]的升序排列,所以父數組將被排序爲2,1,0。
sort
和它的表兄弟有變化,你可以提供自己的排序回調函數:usort
,uasort
(即保持索引),以及uksort
(其排序上的按鍵,您需要創建自己的排序回調做你想在這裏做什麼。
function sort_by_subarray($a, $b)
{
// $a and $b are elements of $array that are being compared against
// each other to be sorted
if (!isset($a[1]) || !isset($b[1]))
{
// Do something if $a[1] or $b[1] is undefined
// Your question doesn't define what the behaviour here should be
}
else
{
if ($a[1] == $b[1]) return 0; // the elements are the same
return ($a[1] < $b[1]) ? -1 : 1; // otherwise, sort from lowest to highest
}
}
$array = array(
array(1, 8, 2),
array(5, 6, 15),
array(-8, 2, 1025)
);
uasort($array, "sort_by_subarray");
/* Results in:
Array
(
[2] => Array
(
[0] => -8
[1] => 2
[2] => 1025
)
[1] => Array
(
[0] => 5
[1] => 6
[2] => 15
)
[0] => Array
(
[0] => 1
[1] => 8
[2] => 2
)
)
*/
注意,我的功能將作爲平等的兩個子陣列進行排序,如果$子數組[1]是平等的,所以如果你想更具體的,你可以添加時更多的規則$a[1] == $b[1]
。
幾乎在那裏,但我需要的東西,將排序一個具體的值與子陣列 - 所以如果數組[1] - > sub_array [2]>數組[2] - > sub_array [2]然後數組[1]勝過數組[2] – 2010-09-11 15:19:06
@Mild Fuzz:這就是我的排序功能應該在做(見結果)。除非我誤解了某些東西? – 2010-09-11 15:27:23
有更好的理解自定義回調函數的好資源嗎? – 2010-09-13 22:03:40
使用http://www.php.net/manual/en/function.usort.php並編寫一個實現所需排序條件的回調函數。
我沒有得到你要求的東西。ELaborate。 – 2010-09-11 14:41:15
很難說出口。我想通過嵌套數組中的值來排序數組。 – 2010-09-11 14:46:04
另請參閱http://stackoverflow.com/questions/3701855/how-do-i-sort-a-php-array-by-an-element-nested-inside – ErichBSchulz 2014-01-07 10:12:02