Hallo,

Ik probeer een multi-dimensionele array te sorteren op index 1. Index 0 is het aantal punten en index 1 is het aantal missies in de onderstaande code. Het is de bedoeling in dit geval dat het aantal missies prioriteit heeft over het aantal punten. Iemand die me hiermee kan helpen? Overigens komen deze gegevens niet uit een database.

Alvast bedankt.

array(6) {
["user1"]=>
array(2) {
[0]=>
int(6755)
[1]=>
int(4)
}
["user2"]=>
array(2) {
[0]=>
int(2160)
[1]=>
int(2)
}
["user3"]=>
array(2) {
[0]=>
int(2310)
[1]=>
int(2)
}
["user4"]=>
array(2) {
[0]=>
int(3910)
[1]=>
int(3)
}
["user5"]=>
array(2) {
[0]=>
int(510)
[1]=>
int(1)
}
["user6"]=>
array(2) {
[0]=>
int(110)
[1]=>
int(1)
}
}
<?php

$array = [...]; //hier je array

usort($array,function($a,$b){
  //$a en $b zijn de user records die je wilt vergelijken

  // <=> is de "spaceship operator": https://www.php.net/manual/en/language.operators.comparison.php
  // eerst op index 1 (aantal missies) vergelijken, als die gelijk zijn levert het 
  // eerste deel 0 op, en wordt dus de vergelijking op index 0 (aantal punten) 
  // doorslaggevend (dmv de "ternary operator" = "?:"
  // https://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
  return ($a[1] <=> $b[1]) ?: ($a[0] <=> $b[0]);
});

var_dump($array); //gesorteerde array

?>

Als de volgorde "verkeerd om" is draai je gewoon $a en $b om.
Dank je we voor je reactie en de uitleg. Enige probleem is dat ik nu de verwijzing naar de user kwijt ben.

Reageren