Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odszukanie wartości z kolekcji
Forum PHP.pl > Forum > Przedszkole
Generic
Dodałem do mojej witryny wyświetlanie zdjęć, które zamieszczam na instagramie, jednak chciałbym aby na stronie pojawiały się tylko te, które zawierają konkretny tag. Moja kolekcja wygląda następująco:

  1. Collection {#672 ▼
  2. #items: array:5 [▼
  3. 0 => {#667 ▼
  4. +"id": "1111111111"
  5. +"user": {#666 ▶}
  6. +"images": {#668 ▶}
  7. +"created_time": "1111111111"
  8. +"caption": {#677 ▶}
  9. +"user_has_liked": false
  10. +"likes": {#663 ▶}
  11. +"tags": []
  12. +"filter": "Normal"
  13. +"comments": {#676 ▶}
  14. +"type": "image"
  15. +"link": "https://www.instagram.com/p/111111111111/"
  16. +"location": null
  17. +"attribution": null
  18. +"users_in_photo": []
  19. }
  20. 1 => {#679 ▼
  21. +"id": "1111111111"
  22. +"user": {#680 ▶}
  23. +"images": {#682 ▶}
  24. +"created_time": "1111111111"
  25. +"caption": {#685 ▶}
  26. +"user_has_liked": false
  27. +"likes": {#687 ▶}
  28. +"tags": array:1 [▼
  29. 0 => "testowy_hasztag"
  30. ]
  31. +"filter": "Normal"
  32. +"comments": {#688 ▶}
  33. +"type": "image"
  34. +"link": "https://www.instagram.com/p/1111111111/"
  35. +"location": null
  36. +"attribution": null
  37. +"users_in_photo": []
  38. }
  39. 2 => {#689 ▶}
  40. 3 => {#699 ▶}
  41. 4 => {#709 ▶}
  42. ]
  43. }


Czy ktoś mógłby mi dać wskazówkę jak przeszukać tablicę znając jedynie klucz pod, którym się znajduje czyli 'tags'. Dodam, że określany tag - roboczo nazwałem go testowy_hasztag nie zawsze będzie pod kluczem [0], więc nie stanowi on w tym przypadku żadnego identyfikatora, którym mógłbym się posłużyć.

Obecnie napisałem tego typu rozwiązanie ale jak powyżej nie zda on egzaminu gdyż wykorzystuje konkretny klucz - [0], aby dostać się do wartości danego tagu, a on może znajdować się pod różnymi kluczami.

  1. $results = collect($instagram->media()->where('tags', [0]));


Nie mogę znaleźć pomysłu jak mógłbym to poprawić, mam nadzieję że nakierujecie mnie na właściwe rozwiązanie problemu.
markonix
Kolekcja, kolekcji nie równa. To nie jest generyczna klasa PHP tylko klasa frameworka, strzelam, że Laravel, wtedy masz mnóstwo ciekawych metod do szukania/filtrowania:

https://laravel.com/docs/5.7/collections#method-filter
Generic
markonix dzięki za wskazówkę, dzięki Tobie moja nauka staje się łatwiejsza, wymyśliłem coś poniżej, daj znać jeśli możesz co o tym sądzisz.

  1. collect($instagram->media())->filter(function ($item) {
  2. return in_array('roboczy_hasztag', $item->tags);
  3. });


Wydaje mi się to najprostszym z możliwych rozwiązań.
markonix
Bez collect skoro media już zwraca kolekcję.
Generic
Cytat(markonix @ 25.02.2019, 23:37:15 ) *
Bez collect skoro media już zwraca kolekcję.


Usunięcie collect wyrzuca mi wyjątek mówiący o wywołaniu funkcji filter w tablicy.
markonix
  1. $instagram->media()->where('tags', [0])

Jeżeli tu używałeś metody where to stwierdziłem, że to już jest kolekcja. Jak widać nie jest nią więc nie usuwaj helpera.
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.