Je suis en train de regarder, mais je ne vois pas trop comment m'y prendre.Et tu as creusé la piste que je t'ai donné ? Qu'est-ce qu'il en ressort ?Voilà, de manière à n'avoir que des positions uniques, et qui se suivent.
Array
(
[1] => 1
[2] => 2
)
où la clé est l'identifiant de l'utilisateur, et la valeur, la position.Array
(
[1] => 2
[2] => 1
)
Puis avec un array_keys, j'ai Array
(
[0] => 1
[1] => 2
)
qui ne stock plus du tout l'identifiant de l'utilisateur. je ne sais plus a qui attribuer quelle position.
C'est le genre d'information que tu aurais pu nous donner dès le départ, car ça change toutes les données du problème (le tableau initial commençait à l'index 0, et rien ne laissait sous-entendre que les index pouvaient être des identifiants).Disons qu'à la base, j'ai le tableau de position suivant :où la clé est l'identifiant de l'utilisateur, et la valeur, la position.Array ( [1] => 1 [2] => 2 )
Question : En supposant que les identifiants soient les clés du tableau, et les positions les valeurs : il n'y a pas quelquechose qui te gêne dans ce tableau ? Quelquechose d'évident.Je modifie les positions, j'ai donc le tableau suivant :Array ( [1] => 2 [2] => 1 )
- Les ID des utilisateurs sont les clés. les positions sont les valeurs.- Les "ID" c'est les valeurs du tableau ou les clés ?
- les doublons se font bien sur la position, et non sur l'id ? (Tu as deux id avec la même position, mais pas deux positions avec le même id ?)
Ok, je reviens dès que j'ai avancé.Question : En supposant que les identifiants soient les clés du tableau, et les positions les valeurs : il n'y a pas quelquechose qui te gêne dans ce tableau ? Quelquechose d'évident.
Tu associes à chaque id un chiffre repérant sa position. Très bien, soit. Mais ce ne serait pas infiniment mieux si l'ordre de ton tableau reflétait l'ordre de la position, plutôt que l'ordre des ID, dont tout le monde se fiche ?
Ce n'est pas seulement un + esthétique, c'est une étape vers la solution. J'attendrai que tu en arrives là, ainsi que les réponses définitives aux quelques questions posées pour bien définir ton problème, pour poursuivre
( Oublions array_keys pour l'instant, cette piste n'est sans doute pas la plus adaptée à ton cas tel qu'il se présente - mais ça va peut-être intervenir plus tard. )
D'ou l'intérêt de regénérer tous les nombres d'un coup (après tout les nombres n'ont pas de sens en tant que tels, ils servent juste de support pour stocker une information : l'ordre relatif des éléments les uns par rapport aux autres, information qui pourrait être représentée de manière naturelle), à plus forte raison s'il y a des doublons dedansdonc partant de ton exemple ca va au delà de incrémentation :
si on a une liste du genre :
1, 2, 2, 2, 2, 7, 8, 9, 9, 9, 8, 8, 8, 8, 8, 1, 1, 1, 1
ca nous ferais
1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 6, 17, 18, 19
Array
(
[2] => 3
[3] => 2
[4] => 2
[5] => 4
[6] => 2
)
Et après un asort() :
Array
(
[6] => 2
[4] => 2
[3] => 2
[2] => 3
[5] => 4
)
)
Dans chacun de ces tableaux, les clés sont les identifiants des utilisateurs, et les valeurs sont leur position.asort($positions);
$start = 1;
foreach($positions as $key => $position) {
$positions[$key] = $start;
$start++;
}