У меня есть следующий массив
[0] => Array ( [id] => 229 [val] => 2 ) [3] => Array ( [id] => 237 [val] => 1 ) [4] => Array ( [id] => 238 [val] => 6 )
Мне нужно отсортировать этот массив в соответствии с значениями val в массиве и не знаю, как это сделать?
function cmp($a, $b) { if ($a["val"] == $b["val"]) { return 0; } return ($a["val"] < $b["val"]) ? -1 : 1; } usort($yourarray, "cmp");
Прочтите это для получения дополнительной информации.
array_multisort может помочь в этом, пример 3 представляет собой аналогичную проблему и решение.
Вы можете использовать array_multisort()
Примеры здесь: http://www.php.net/manual/en/function.array-multisort.php
Примеры результатов сортировки по примерам № 3 – это то, что вы хотите. Может быть проще, если вы не знакомы с функциями обратного вызова и usort()
.
function sksort(&$array, $subkey="id",$sort_ascending=false) { if (count($array)) $temp_array[key($array)] = array_shift($array); foreach($array as $key => $val){ $offset = 0; $found = false; foreach($temp_array as $tmp_key => $tmp_val) { if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { $temp_array = array_merge( (array)array_slice($temp_array,0,$offset), array($key => $val), array_slice($temp_array,$offset) ); $found = true; } $offset++; } if(!$found) $temp_array = array_merge($temp_array, array($key => $val)); } if ($sort_ascending) $array = array_reverse($temp_array); else $array = $temp_array; }
================================================== ========================= Теперь используйте эту функцию в массиве ур
sksort($arrayname, "val"); /* for ascending */ sksort($arrayname, "val", true); /* for descending */