Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Łączenie dwóch tablic i usuwanie wybranych rekordów
Zendoo
post 27.04.2011, 11:26:46
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.04.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
matino
post 27.04.2011, 11:58:39
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

Ostrzeżenie: (0%)
-----


  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']);
Go to the top of the page
+Quote Post
Zendoo
post 27.04.2011, 16:13:22
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.04.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:58