• 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

Object Storage Arubacloud
0 głosów
282 wizyt
pytanie zadane 14 marca 2022 w PHP przez AnimaVillis Stary wyjadacz (11,350 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,950 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,350 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,950 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,350 p.)
Dzięki za naprowadzenie, ogarnąłem :)

Podobne pytania

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

92,555 zapytań

141,402 odpowiedzi

319,542 komentarzy

61,939 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...