Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]niewiem jak połączyć tablice
Forum PHP.pl > Forum > Przedszkole
fiszol
Tablice wyglądają tak:
$arr1:
Kod
Array
(
    [0] => id1
    [1] => id2
    [2] => id3
    [3] => id2
    [4] => id1
    [5] => id4
)

$arr2
Kod
Array
(
    [0] => Array
        (
            [1] => 550
        )

    [1] => Array
        (
            [4] => 749
            [13] => 1501
        )

    [2] => Array
        (
            [2] => 2000
        )
    [3] => Array
        (
            [1] => 2017
            [9] => 25
        )
    [4] => Array
        (
            [1] => 30
            [4] => 25
        )
    [5] => Array
        (
            [2] => 1430
            [13] => 1
        )
)


Ilość kluczy w obu zawsze będzie się pokrywać, ale ta ilość może się wachać od 1 do 30. Potrzebuję porównać najpierw id z pierwszej tablicy i względem tego połączyć klucze w drugiej tablicy. W powyższej tablicy $arr1[0] == $arr1[4] i $arr1[1] == $arr1[3]. Chciałbym więc połączyć $arr2[0] z $arr2[4] oraz $arr2[1] z $arr2[3], na podstawie tego chciałbym uzyskać $arr3 która będzie wyglądała mniej więcej tak wyglądała mniej więcej tak:
Kod
Array
(
    [0] => Array
        (
            [1] => 580
            [4] => 25
        )

    [1] => Array
        (
            [1] => 2017
            [4] => 749
            [9] => 25
            [13] => 1501
            
        )
)

Proszę zwrócić uwagę na to, że klucz $arr2[0][1] ma już wartość więc kolejne jego wystąpenie (w tym wypadku) $arr2[4][1] jest dodawane do poprzedniego. Na kombinowałem się już z wręcz łańcuchowymi pętlami, ifami itd i nic nie osiągnąłem. Skończyły mi się już pomysły. Mam nadzieję że mój opis będzie dla Was zrozumiały.




Temat utonął więc odświeżę. Czy ktoś ma jakies sugestie jak się do tego zabrać?
tehaha
normalnie staram się nie dawać gotowców, ale to było ciekawe ćwiczonko:)
  1. $arr1 = Array
  2. (
  3. 0 => 'id1',
  4. 1 => 'id2',
  5. 2 => 'id3',
  6. 3 => 'id2',
  7. 4 => 'id1',
  8. 5 => 'id4'
  9. );
  10. $arr2 = Array
  11. (
  12. 0 => Array
  13. (
  14. 1 => 550
  15. ),
  16.  
  17. 1 => Array
  18. (
  19. 4 => 749,
  20. 13 => 1501
  21. ),
  22.  
  23. 2 => Array
  24. (
  25. 2 => 2000
  26. ),
  27. 3 => Array
  28. (
  29. 1 => 2017,
  30. 9 => 25
  31. ),
  32. 4 => Array
  33. (
  34. 1 => 30,
  35. 4 => 25
  36. ),
  37. 5 => Array
  38. (
  39. 2 => 1430,
  40. 13 => 1
  41. )
  42. );
  43. $arr3 = array();
  44. $assoc = array();
  45. //przepisujemy pierwszą tablicę tak aby mieć tablicę zawierającą relacje co z czym łączymy
  46. foreach($arr1 as $key=>$value)
  47. {
  48. $assoc[$value][] = $key;
  49. }
  50. //pętla po każdym zestawie
  51. foreach($assoc as $assoc_array)
  52. {
  53. //w zestawie pętla po każdej wartości
  54. $single_array = array(); // tu będziemy przechowywać złączoną tablicę
  55. foreach($assoc_array as $array_key)
  56. {
  57. //tą pętlą połączymy tablice z $arr2
  58. foreach($arr2[$array_key] as $key => $value)
  59. {
  60. if(array_key_exists($key, $single_array))
  61. {
  62. //jeżeli klucz już istnieje to dodajemy wartość
  63. $single_array[$key] = $single_array[$key] + $value;
  64. }
  65. else
  66. {
  67. $single_array[$key] = $value;
  68. }
  69. }
  70. }
  71. $arr3[] = $single_array;
  72. }
  73. print_r($arr3);


wynik:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [1] => 580
  6. [4] => 25
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [4] => 749
  12. [13] => 1501
  13. [1] => 2017
  14. [9] => 25
  15. )
  16.  
  17. [2] => Array
  18. (
  19. [2] => 2000
  20. )
  21.  
  22. [3] => Array
  23. (
  24. [2] => 1430
  25. [13] => 1
  26. )
  27.  
  28. )

czyli chyba o to Ci chodziło

@DOWN: za to właśnie lubię to forum, człowiek się zawsze czegoś nauczy:)
Wicepsik
Zapodam krótszy kod

  1. foreach($a as $k=>$v){
  2. foreach($b[$k] as $j=>$s){
  3. $c[$v][$j]+=$s;
  4. }
  5. }
  6. print_r($c);
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.