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

question-closed PHP porównanie wartości dwóch tablic

VPS Starter Arubacloud
0 głosów
267 wizyt
pytanie zadane 14 marca 2022 w PHP przez AnimaVillis Stary wyjadacz (11,190 p.)
zamknięte 14 marca 2022 przez AnimaVillis

Witam,

Mam dwie takie same tablice, jedna pobierana dynamicznie ze strony i zbudowana, druga pobierana z pliku json, obie posiadają te same wartości.

Mianowicie wyniki.json jest taki:

[
    {
        "title": "Lorem ipsum dolor sit amet.",
        "url": "Lorem ipsum dolor sit amet.",
        "id": "59091"
    },
    {
        "title": "Lorem ipsum dolor sit amet.",
        "url": "Lorem ipsum dolor sit amet.",
        "id": "59091"
    },
    {
        "title": "Lorem ipsum dolor sit amet.",
        "url": "Lorem ipsum dolor sit amet.",
        "id": "59091"
    },
    {
        "title": "Lorem ipsum dolor sit amet.",
        "url": "Lorem ipsum dolor sit amet.",
        "id": "59091"
    },
    {
        "title": "Lorem ipsum dolor sit amet.",
        "url": "Lorem ipsum dolor sit amet.",
        "id": "59091"
    }
]

Tablica zwracana przez php:

array(5) {
  [0]=>
  array(3) {
    ["title"]=>
    string(83) "Lorem ipsum dolor sit amet."
    ["url"]=>
    string(109) "Lorem ipsum dolor sit amet."
    ["id"]=>
    string(5) "59091"
  }
  [1]=>
  array(3) {
    ["title"]=>
    string(27) "Lorem ipsum dolor sit amet."
    ["url"]=>
    string(60) "Lorem ipsum dolor sit amet."
    ["id"]=>
    string(5) "60255"
  }
  [2]=>
  array(3) {
    ["title"]=>
    string(30) "Lorem ipsum dolor sit amet."
    ["url"]=>
    string(61) "Lorem ipsum dolor sit amet."
    ["id"]=>
    string(5) "60254"
  }
  [3]=>
  array(3) {
    ["title"]=>
    string(14) "Lorem ipsum dolor sit amet."
    ["url"]=>
    string(47) "Lorem ipsum dolor sit amet."
    ["id"]=>
    string(5) "60253"
  }
  [4]=>
  array(3) {
    ["title"]=>
    string(51) "Lorem ipsum dolor sit amet."
    ["url"]=>
    string(84) "Lorem ipsum dolor sit amet."
    ["id"]=>
    string(5) "60252"
  }
}

Kod, który napisałem żeby sprawdzać obie te tablice wygląda tak:

foreach($json_arr as $info){
                        if(in_array($info[$x]['id'], $oferty, TRUE)){
                               echo 'Obie takie same.'; 
                        } else {
                               echo 'Inne';
            }
        $x++;
        }

Niestety problem polega na tym, że nawet jak 2/5 są inne to czynność przypisana do nich wykonuje się dla wszystkich tak samo czyli powiedźmy tutaj jest powiadomienie na telegramie i zamiast dostać wiadomość, że 2/5 id są inne to wysyła 5 komunikatów. 

Jakieś podpowiedzi?

komentarz zamknięcia: Ogarnięte
komentarz 14 marca 2022 przez Arkadiusz Waluk Ekspert (287,550 p.)
Coś tu chyba jest pomieszane. Skoro już jest foreach, który iteruje po elementach, to po co dodatkowo ten $x? A $oferty to jakaś tablica, która zawiera same id informacji czy całą strukturę?
komentarz 14 marca 2022 przez AnimaVillis Stary wyjadacz (11,190 p.)
edycja 14 marca 2022 przez AnimaVillis
Obie tablice są takie same $oferty jest pobierana co 5 minut, $json_arr jest w pliku jsona. Obie są dokładnie takie same.

Bo $x pobiera numer w tablicy od 0 do 5.

 

No i przykłady tablic w pierwszym poście.

1 odpowiedź

+1 głos
odpowiedź 14 marca 2022 przez Arkadiusz Waluk Ekspert (287,550 p.)
wybrane 14 marca 2022 przez AnimaVillis
 
Najlepsza

W takim razie użycie w in_array() konkretnego id i próba szukania go w całej tablicy $oferty się nie uda. To mogłoby zadziałać, gdyby to była tablica samych id i tak możesz to zrobić. Jeśli to jest tablica, która ma wiele elementów w sobie i dalej dopiero klucze, które mają wartości, to nie zadziała. Nie wiem czego dokładnie później potrzebujesz. Zakładając, że chcesz tylko wyciągnąć informacje o tym czy dany komunikat był wysłany z danych czytanych z pliku możesz użyć array_column(), a następnie na tym co zwróci zrobić in_array(), na przykład: https://3v4l.org/f2UFi

Samo in_array() mogłoby być np. w pętli, gdzie zamiast stałego 5 z przykładu, u Ciebie byłoby to id konkretnego elementu z tablicy pobieranej ze strony.

1
komentarz 14 marca 2022 przez AnimaVillis Stary wyjadacz (11,190 p.)
Dzięki za naprowadzenie, ogarnąłem :)

Podobne pytania

0 głosów
2 odpowiedzi 732 wizyt
pytanie zadane 12 września 2017 w PHP przez sc4rface Dyskutant (7,710 p.)
0 głosów
1 odpowiedź 1,107 wizyt
pytanie zadane 30 lipca 2019 w JavaScript przez niezalogowany
+1 głos
2 odpowiedzi 417 wizyt
pytanie zadane 25 lutego 2021 w JavaScript przez MarcoPolo Nowicjusz (180 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...