Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: array_udiff
Forum PHP.pl > Forum > PHP
abusiek
Ogolnie problem wyglada tak
Mam dwie tablice:
1. prevPoints:
  1. <?php
  2. (
  3. [0] => Array
  4. (
  5. [old] => 8225
  6. [new] => 6593
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [old] => 8348
  12. [new] => 6621
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [old] => 6854
  18. [new] => 4820
  19. )
  20.  
  21. [3] => Array
  22. (
  23. [old] => 6859
  24. [new] => 2591
  25. )
  26.  
  27. [4] => Array
  28. (
  29. [old] => 8509
  30. [new] => 11451
  31. )
  32.  
  33. [5] => Array
  34. (
  35. [old] => 6877
  36. [new] => 6613
  37. )
  38.  
  39. [6] => Array
  40. (
  41. [old] => 8476
  42. [new] => 6421
  43. )
  44. }
  45. ?>


2. aPoints:

  1. <?php
  2. (
  3. [1] => Array
  4. (
  5. [old] => 8348
  6. [new] => 6621
  7. )
  8.  
  9. [3] => Array
  10. (
  11. [old] => 6859
  12. [new] => 2591
  13. )
  14.  
  15. [4] => Array
  16. (
  17. [old] => 8509
  18. [new] => 11451
  19. )
  20.  
  21. [5] => Array
  22. (
  23. [old] => 6877
  24. [new] => 6613
  25. )
  26.  
  27. [6] => Array
  28. (
  29. [old] => 8476
  30. [new] => 6421
  31. )
  32.  
  33. )
  34. ?>


oraz funkcje porownujaca:

  1. <?php
  2. function compareRemove($a1, $a2)
  3. {
  4. if($a1['old'] == $a2['old'])
  5. return 0;
  6.  
  7. if($a1['old'] != $a2['old'])
  8. return -1;
  9. }
  10. ?>


po wykonaniu:

  1. <?php
  2. array_udiff($prevPoints, $aPoints, "compareRemove");
  3. ?>


dostaje taka tablice:

  1. <?php
  2. (
  3. [0] => Array
  4. (
  5. [old] => 8225
  6. [new] => 6593
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [old] => 8348
  12. [new] => 6621
  13. )
  14.  
  15. [2] => Array
  16. (
  17. [old] => 6854
  18. [new] => 4820
  19. )
  20.  
  21. [3] => Array
  22. (
  23. [old] => 6859
  24. [new] => 2591
  25. )
  26.  
  27. [4] => Array
  28. (
  29. [old] => 8509
  30. [new] => 11451
  31. )
  32.  
  33. [5] => Array
  34. (
  35. [old] => 6877
  36. [new] => 6613
  37. )
  38.  
  39. )
  40. ?>


Co jest ewidentnie zle, bo wg. mnie funkcja powinna zwrocic tablice:

  1. <?php
  2. [0] => Array
  3. (
  4. [old] => 8225
  5. [new] => 6593
  6. )
  7. [2] => Array
  8. (
  9. [old] => 6854
  10. [new] => 4820
  11. )
  12. )
  13. ?>


czyli te 'podtablice', ktore sa w $prevPoints i nie ma ich w $aPoints.
Mam jakis blad??
Kowalikus
  1. <?php
  2. function compareRemove($a1, $a2)
  3. {
  4. return $a1['old'] - $a2['old'];
  5. }
  6. ?>


powinno zadziałać
abusiek
Rzeczywiscie zadzialalo, tylko pytanie czemu nie zadzialala poprzednia funkcja?? Przeciez zawsze zwraca odpowiednia wartosc (0 lub -1) i powinna dobrze dzialac z array_udiff, czy sie myle?

PS. nie wiem czy to prawda ale wyglada na to ze funkcja uzyta do porownania musi 'miec mozliwosc' zwrocenia wszystkich trzech wartosci (0, 1, -1)
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.