Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie wartości tablicy
Forum PHP.pl > Forum > PHP
lustfingers
Witajcie mam tablicę typu:

  1. array(4) {
  2. [0]=>
  3. array(3) {
  4. ["id"]=> "1"
  5. ["color"]=> "red"
  6. ["size"]=> "S"
  7. [1]=>
  8. array(3) {
  9. ["id"]=> "1"
  10. ["color"]=> "red"
  11. ["size"]=> "M"
  12. [2]=>
  13. array(3) {
  14. ["id"]=> "2"
  15. ["color"]=> "red"
  16. ["size"]=> "S"
  17. [3]=>
  18. array(3) {
  19. ["id"]=> "2"
  20. ["color"]=> "red"
  21. ["size"]=> "M"
  22. }


Jak widać pewne elementy tablicy się powtarzają dlatego chciałbym ją tak połączyć aby elementy wspólne się nie dublowały tylko elementy różne mają się połączyć z rozdzielaczem w formie przecinka, czyli finalnie chciałbym uzyskać taki efekt:

  1. array(2) {
  2. [0]=>
  3. array(3) {
  4. ["id"]=> "1"
  5. ["color"]=> "red"
  6. ["size"]=> "S, M"
  7. [1]=>
  8. array(3) {
  9. ["id"]=> "2"
  10. ["color"]=> "red"
  11. ["size"]=> "S, M"
  12. }


Czy są jakieś wbudowane funkcje które mi to ułatwią? Jak to najlepiej zrobić?
vokiel
Raczej nie użyjesz tu nic w stylu array_merge, musisz więc przeiterować tablicę i dla każdego elementu dodać sprawdzanie.
lustfingers
Dziękuje za odpowiedź, jeszcze jakbyś mógł podpowiedzieć pod jakim hasłem szukać było by mi z pewnością prościej. Staram się samemu rozwiązywać problemy ale powroty do kodowania są ciężkie szczególnie gdy zakończyło się przygodę na poziomie początkujący to po 3 latach przerwy okazuje się że jestem poniżej tego poziomu biggrin.gif
SmokAnalog
Zapodaj sobie array_reduce (zakładam, że Twoja tablica jest w $data):

  1. $data,
  2. function (array $carry, array $item): array {
  3. $key = json_encode([$item['id'], $item['color']]);
  4. if (!isset($carry[$key])) {
  5. $carry[$key] = array_merge($item, ['size' => []]);
  6. }
  7.  
  8. array_push($carry[$key]['size'], $item['size']);
  9.  
  10. return $carry;
  11. },
  12. []
  13. ));
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-2024 Invision Power Services, Inc.