| Autor | Zpráva | ||
|---|---|---|---|
| Vilak Profil |
#1 · Zasláno: 8. 11. 2016, 20:14:06
Zdravím. Mám pole v php, ve které mám X čísel. Vím, že tato čísla jsou PŘIROZENÁ ČÍSLA. Jak to mám udělat, aby se mi duplicity přepsali třeba na nejvyšší možné číslo, pokud tam nějaká taková duplicita je?
Např.: Pole "Rank" obsahuje: 1;3;2;5;3;8;6;4;5;3 a chci to udělat tak, aby tam bylo každé číslo právě jednou, jak? Tudíž chci, aby se z duplicit staly nějaká jiná čísla, ale nevím, jak to udělat. Jen ještě chci dodat, že pořadí prvků musí byt stejné. Má někdo nějaký nápad? :) |
||
| Keeehi Profil |
#2 · Zasláno: 8. 11. 2016, 21:24:26
Vilak:
Moc to nedává smysl. Hlavně to, že je ti jedno, na co se to změní. Na co to chceš využívat? |
||
| Vilak Profil |
#3 · Zasláno: 8. 11. 2016, 21:38:21
Na pořadí. Ovšem když se někdo splete, ať to udělá nějaké jiné číslo. Nejlépe nejvyšší.
|
||
| juriad Profil |
function renumber($arr) {
$next = max($arr) + 1; # toto bude hodnota použitá pro náhrady
$uniq = array_flip($arr); # převedeme na pole [hodnota => poslední výskyt]
foreach ($arr as &$el) { # projdeme pole (prvky jsou reference, aby se do nich dalo přiřazovat)
if ($uniq[$el] !== NULL) { # pokud je v poli $uniq
$uniq[$el] = NULL; # tak ho od tamtud smažeme
} else { # druhý a další výskyt
$el = $next++; # nahradíme za hodnotu větší než maximum a to následně zvětšíme
}
}
return $arr; # pole vrátíme
}
var_dump(renumber([1,3,2,5,3,8,6,4,5,3])); |
||
| Vilak Profil |
#5 · Zasláno: 9. 11. 2016, 10:06:06
juriad:
Super. Díky moc! Přesně toto jsem potřeboval. :) |
||
|
Časová prodleva: 10 let
|
|||
0