Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] array_flip i unikanie kolizji
Forum PHP.pl > Forum > Przedszkole
nemo27
Potrzebuję użyć funkcji array_flip do posortowania wyników tablicy lecz łącznie z nazwami kluczy.
Czyli:
a=3
b=2
c=1 etc.
Problem polega na tym, że jeśli znajdą się dwie nazwy o tej samej wartości np: 10 - to pozostaje tylko jej wartość bez nazwy.
Chodzi mi teraz jak rozwiązać tę kolizję tej funkcji, tzn jeśli będą dwie te same wartości to pojawiły się obie łącznie z nazwami.
  1. <?
  2. $sum_a = 12;
  3. $sum_b = 10;
  4. $sum_c = 12;
  5. $sum_d = 8;
  6. $sum_e = 9;
  7. $array = array ("suma" => $sum_a,"sumb" => $sum_b,"sumc" => $sum_c,"sumd" => $sum_d,"sume" => $sum_e);
  8.  
  9. ksort($array);
  10. $array = array_flip($array);
  11.  
  12. while (list($k,$v) = each ($array))
  13. { print ("<br>".$k."-".$v);
  14. }
  15.  
  16. ?>

Hmm
Darti
W commentach do array_flip znalazłem:
  1. <?php
  2. function array_invert($arr)
  3. {
  4. $res = Array();
  5. foreach(array_keys($arr) as $key)
  6. {
  7. if (!array_key_exists($arr[$key], $res)) $res[$arr[$key]] = Array();
  8. array_push($res[$arr[$key]], $key);
  9. }
  10. return $res;
  11. }
  12. ?>
nemo27
Ok, ale jak robię tak:
  1. <?
  2. $sum_a = 12;
  3. $sum_b = 10;
  4. $sum_c = 12;
  5. $sum_d = 8;
  6. $sum_e = 9;
  7. $array = array ("suma" => $sum_a,"sumb" => $sum_b,"sumc" => $sum_c,"sumd" => $sum_d,"sume" => $sum_e);
  8.  
  9. function array_invert($arr)
  10. {
  11. $res = Array();
  12. foreach(array_keys($arr) as $key)
  13. {
  14. if (!array_key_exists($arr[$key], $res)) $res[$arr[$key]] = Array();
  15. array_push($res[$arr[$key]], $key);
  16. }
  17. return $res;
  18. }
  19.  
  20.  
  21. array_invert($array);
  22.  
  23. while (list($k,$v) = each ($array))
  24. { print ("<br>".$k."-".$v);
  25. }
  26.  
  27.  
  28. ?>


To znów otrzymuję kolejność:
suma-12
sumb-10
sumc-12
sumd-8
sume-9
a powinno być:
suma
sumc
sumb
sume
sumd
W czym błąd?

Ok EUREKA winksmiley.jpg znalazłem - może się to komuś przyda:
  1. <?php
  2. $sum_a = 12;
  3. $sum_b = 10;
  4. $sum_c = 12;
  5. $sum_d = 8;
  6. $sum_e = 9;
  7. $array = array ("suma" => $sum_a,"sumb" => $sum_b,"sumc" => $sum_c,"sumd" => $sum_d,"sume" => $sum_e);
  8.  
  9.  
  10. function array_invert($arr)
  11. {
  12. $res = Array();
  13. foreach(array_keys($arr) as $key)
  14. {
  15. if (!array_key_exists($arr[$key], $res)) $res[$arr[$key]] = Array();
  16. array_push($res[$arr[$key]], $key);
  17. }
  18. return $res;
  19. }
  20. array_invert($array);
  21. arsort($array);
  22.  
  23. while (list($k,$v) = each ($array))
  24. { print ("<br>".$k."-".$v);
  25. }
  26. ?>

Pozdro smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.