• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie tylko jednego echa w pętli

0 głosów
64 wizyt
pytanie zadane 31 sierpnia 2017 w PHP, Symfony, Zend przez sc4rface Mądrala (6,610 p.)

Cześć, zamieszczam swój fragment kodu, z którym mam mały problem. 

$result = array();

            foreach ($products as $detail) {
                
                $cid = $detail['category_id'];
                $pid = $detail['product_id'];
                $status = $detail['active'];
                $result[$cid][$pid] = $status;

            }
            
            $multiplier = $result[$cid][$pid];
            $counter = count($result[$cid]);
            $multiplier2 = 1;
            
            for ($id = 0; $id < $counter; $id++) {
                $multiplier = $multiplier * $multiplier2;
            }
                                     
            if ($multiplier == 0) {
                echo 'Kategoria ID '.$cid.' pusta';
            } else {
                echo 'Kategoria ID '.$cid.' zawiera produkty';
            }

Generuje on następującą tablice:

Array
(
    [221] => Array
        (
            [1] => 0
            [2] => 0
        )

    [1437] => Array
        (
            [3] => 0
        )

)

Wszystko byłoby spoko, gdyby nie fakt - że wyświetla tylko jedno echo - mianowicie ostatni rekord tablicy. Działa to na tej zasadzie, że skrypt pobiera wartości [1][2][3] i tak dalej (nie sa one po kolei, tutaj tak się złożyło) i mnoży je przez siebie w odpowiednim ID nadrzędnym. Jeśli wynik mnożenia jest > 0 wyświetla "kategoria zawiera produkty" jeżeli nie, pusta. Problem w tym, że wyświetla tylko jedno echo - a na przykładzie tej tablicy, powinien wyświetlić ich dwa - mianowicie 2x "kategoria jest pusta". Jak mogę to naprawić?

1 odpowiedź

+2 głosów
odpowiedź 31 sierpnia 2017 przez Ehlert VIP (128,360 p.)
Kod jest strasznie nieczytelny. Jest to fragment kodu, więc nie wiem jakie dane przetwarzasz i po co robisz to w taki sposób. Proponuję dołączenie reszty, lub skorzystanie z IDE + Xdebuga. Na ten moment nawet, gdybym chciał Ci pomóc jestem wybity z kontekstu.
komentarz 31 sierpnia 2017 przez sc4rface Mądrala (6,610 p.)
Drugi raz łapię się na tym, że komplikuję sobie życie. Ostatnio również pytałem o rozwiązanie łączenia trzech tablic w jedną i jej sformatowanie, a okazało się, że spokojnie mogłem wykonać wszystko jednym zapytaniem do bazy...
2
komentarz 31 sierpnia 2017 przez Boshi VIP (100,040 p.)
Z zasady baza powinna być tak zaprojektowana abyś nie musiał w phpie bawić się w operacje logiczne na tablicach. Wyciągasz z bazy to co potrzebujesz, wstawiasz ewentualnie jakiś warunek na podstawie tychże danych i wtedy masz jasność :)
komentarz 31 sierpnia 2017 przez sc4rface Mądrala (6,610 p.)
edycja 31 sierpnia 2017 przez sc4rface

No dobra, teraz mój kod drastycznie się zmienił :D Zawiera 3 linijki? Tak czy inaczej dalej coś nie gra, bowiem dalej te kategorie się dublują. 

foreach ($products as $detail) {

echo 'Pusta kategoria: ' .$detail['category_id']. '<br />'; 
                
}

Totalnie nie wiem co jest tutaj powodem, tablica $products wygląda w ten sposób:

Array
(
    [0] => Array
        (
            [product_id] => 1
            [0] => 1
            [category_id] => 221
            [1] => 221
            [active] => 0
            [2] => 0
        )

    [1] => Array
        (
            [product_id] => 2
            [0] => 2
            [category_id] => 221
            [1] => 221
            [active] => 0
            [2] => 0
        )

    [2] => Array
        (
            [product_id] => 3
            [0] => 3
            [category_id] => 1437
            [1] => 1437
            [active] => 0
            [2] => 0
        )

    [3] => Array
        (
            [product_id] => 4
            [0] => 4
            [category_id] => 1437
            [1] => 1437
            [active] => 0
            [2] => 0
        )

    [4] => Array
        (
            [product_id] => 5
            [0] => 5
            [category_id] => 216
            [1] => 216
            [active] => 0
            [2] => 0
        )

)

 

@EDIT

Tak sobie to przemyślałem i w jaki sposób miałoby to działać, active nie jest znacznikiem kategorii, a produktu. Działa to w ten sposób, że jeśli żadne produkty w kategorii nie są aktywne - wtedy kategoria nie jest aktywna. Jeśli choć jeden jest aktywny, jest aktywna. Istnieje możliwość zapisania tego w czystym SQL'u, nie wydaje mi się.

komentarz 31 sierpnia 2017 przez Ehlert VIP (128,360 p.)
Istnieje. Ale masz źle zaprojektowaną bazę danych.
komentarz 31 sierpnia 2017 przez sc4rface Mądrala (6,610 p.)
Da radę to jakoś obejść? Przeprojektowanie bazy odpada - nie ja ją tworzyłem, tym bardziej jest na to zbyt obszerna.

Podobne pytania

0 głosów
1 odpowiedź 87 wizyt
pytanie zadane 12 września 2017 w JavaScript, jQuery, AJAX przez kevin Bywalec (2,780 p.)
0 głosów
1 odpowiedź 69 wizyt
pytanie zadane 14 stycznia 2017 w PHP, Symfony, Zend przez Zazazing Nowicjusz (150 p.)
Oferty pracy dla początkujących programistów na portalu No Fluff Jobs
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

49,789 zapytań

91,755 odpowiedzi

185,359 komentarzy

24,231 pasjonatów

Przeglądających: 242
Pasjonatów: 18 Gości: 224

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...