#php #sorting
#php #сортировка
Вопрос:
Итак, я отсортировал многомерный массив с помощью uasort
в порядке убывания. Я сделал var_dump($winrateArray)
, и он отсортирован должным образом. Наибольшее значение находится в первом возвращенном массиве. Однако, когда я пробую var_dump($winrateArray[0][3])
, где я ожидаю получить наибольшее значение, его там нет. Вместо этого он находится в $winrateArray[1][3]
. Правильно ли я использую uasort
?
Несортированный дамп:
array(2) { [0]=> array(4) { [0]=> string(2) "18" [1]=> string(1) "1" [2]=> int(0) [3]=> int(1) } [1]=> array(4) { [0]=> string(2) "31" [1]=> string(1) "1" [2]=> int(100) [3]=> int(101) } }
Сортированный дамп:
array(2) { [1]=> array(4) { [0]=> string(2) "31" [1]=> string(1) "1" [2]=> int(100) [3]=> int(101) } [0]=> array(4) { [0]=> string(2) "18" [1]=> string(1) "1" [2]=> int(0) [3]=> int(1) } }
Конкретный дамп:
int(1)
.
$winrateArray[0][0] = '18';
$winrateArray[0][1] = '1';
$winrateArray[0][2] = 0;
$winrateArray[0][3] = 1;
$winrateArray[1][0] = '31';
$winrateArray[1][1] = '1'
$winrateArray[1][2] = 100;
$winrateArray[1][3] = 101;
var_dump($winrateArray);
function cmp($a, $b){
if ($a[3] == $b[3]){
return 0;
}
return ($a[3] < $b[3]) ? 1 : -1;
}
uasort($winrateArray, 'cmp');
var_dump($winrateArray);
var_dump($winrateArray[0][3]);
Комментарии:
1. опубликуйте примерный набор данных, которые вы используете, нам будет очень полезно помочь и протестировать.
2. Нам нужно увидеть массив и результаты.
3. Как я вижу, результат упорядочен правильно, но ключи сохранены, а вы этого не хотите?
4. Я добавил некоторые данные и показал результаты дампов. Честно говоря, я думаю, что просто неправильно истолковываю, как работает этот вид. Я думал, что это переместит наибольшее значение в [0] [3], 2-е по величине в [1][3].
5. Нет, это так не работает
Ответ №1:
Вы можете сделать:
$newArray = $winrateArray;
uasort($winrateArray, 'cmp');
$i = 0;
foreach($winrateArray as $key => $item) {
$newArray[$i][3] = $item[3];
$i ;
}
и после этого использует новый массив. Вы сохраните ключи и измените порядок и замените только 3 элемента
Комментарии:
1. Это решение работает отлично. Я не совсем понимаю, что делает «as $key => $item», но большое спасибо!
2. $key — это ключ текущего элемента в цикле foreach (родительские ключи), а элемент содержит внутренний массив (массив с 3 элементами) данного родительского элемента.