Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie dwóch tablic i usuwanie wybranych rekordów
Forum PHP.pl > Forum > PHP
Zendoo
Witam. To mój pierwszy post, chociaż forum czytuje od dłuższego czasu, ale podobnego problemu nie znalazłem jak do tej pory. Mam dostarczane z zewnątrz tablice w postaci ('rozmiary' i 'szczegoly' z obu tablic zawsze odpowiadają sobie kolejnością i jest ich tyle samo mimo, że w jednej klucze są oznaczane cyframi, a w drugiej literami):
Kod
Array
(
    [rozmiary] => Array
    (
        [0] => Array
        (
            [nazwa] => XS
            [cena] => 1
        )
        [1] => Array
        (
            [nazwa] => S
            [cena] => 2
        )
        [2] => Array
        (
            [nazwa] => M
            [cena] => 3
        )
        [itd...]
    )

    [szczegoly] => Array
    (
        [XS] => Array
        (
            [nazwa_rozmiaru] => XS  
            [width] => 100
            [height] => 100
        )
        [S] => Array
        (
            [nazwa_rozmiaru] => S
            [width] => 200
            [height] => 200
        )
        [M] => Array (
            [nazwa_rozmiaru] => M  
            [width] => 300
            [height] => 300
        )
    )
)


I chciałbym z tego uzyskać tablice takiej postaci i później (lub wcześniej jeszcze przed połączeniem tablic, nie wiem jak będzie wygodniej) usunąć z niej wszystkie tablice gdzie wartość 'nazwa' jest inna niż 'S' albo 'M' (różnych rozmiarów może być oczywiście więcej niż na przykładzie, mnie interesuje zostawienie tylko wybranych 2-3):
Kod
Array
(
    [0] => Array
    (
        [nazwa] => XS
        [cena] => 1
        [width] => 100
        [height] => 100
    )
    [1] => Array
    (
        [nazwa] => S
        [cena] => 2
        [width] => 200
        [height] => 200
    )
    [2] => Array
    (
        [nazwa] => M
        [cena] => 3
        [width] => 300
        [height] => 300
    )
    [3] => Array
    (
        [nazwa] => L
        [cena] => 4
        [width] => 400
        [height] => 400
     )
    [itd...]
)


Próbowałem to osiągnąć za pomocą foreach:
  1. foreach ($tablica['rozmiary'] as $v1 => $v2)
  2. {
  3. foreach ($tablica['szczegoly'] as $v3 => $v4)
  4. {
  5. $wynik[] = array ('name' => $v2['nazwa'], 'price' => $v2['cena'], 'width' => $v4['width'], 'height' => $v4['height']);
  6. }
  7. }

oraz dwóch osobnych foreach łączonych za pomocą array_merge, ale to nadal nie jest to czego mi trzeba, nie wspominając już o późniejszym usuwaniu (chociaż tutaj myślałem o zastosowaniu array_intersect). Proszę bardziej o sugestie jakimi funkcjami powinienem się zainteresować i jak powinienem spróbować ugryźć ten problem zamiast o gotowe rozwiązania smile.gif.
matino
  1. $i = 0;
  2. $sizes = array('S', 'M');
  3. foreach ($tablica['szczegoly'] as $array)
  4. {
  5. if (in_array($tablica['rozmiary'][$i]['nazwa'], $sizes))
  6. {
  7. unset($tablica['rozmiary'][$i]);
  8. }
  9. else
  10. {
  11. $tablica['rozmiary'][$i]['width'] = $array['width'];
  12. $tablica['rozmiary'][$i]['height'] = $array['height'];
  13. }
  14. $i++;
  15. }
  16.  
  17. print_r($tablica['rozmiary']);
Zendoo
Dzięki wielkie za odpowiedź, jedyna zmiana jaką wykonałem w powyższym kodzie, aby uzyskać to czego potrzebowałem to zmiana (in_array...) na (!in_array...) tak żeby zostawić, a nie usuwać te rozmiary, których potrzebuje 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.