Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyszukanie w tablicy i pobranie
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Tablica:
  1. [0] => Array (
  2. [id] => 5
  3. [name] => bialy
  4. )
  5. [1] => Array (
  6. [id] => 3
  7. [name] => czerwony
  8. )
  9. [2] => Array (
  10. [id] => 1
  11. [name] => niebieski
  12. )
  13. [3] => Array (
  14. [id] => 2
  15. [name] => pomarańczowy
  16. )
  17. [4] => Array (
  18. [id] => 4
  19. [name] => zielony
  20. )
  21. )

I teraz kodzik:
  1. <?php
  2. $szukany = $_GET['color'];
  3.  
  4. function jest($szukany, $colors) {
  5. foreach((array) $users as $klucz=>$wartosc) {
  6. if ($wartosc === $szukany or is_array($wartosc) and jest($szukany, $wartosc)) {
  7. return $szukany;
  8. }
  9. }
  10. }
  11. if (jest($szukany, $colors)) echo $szukany;
  12. else echo "BRAK";
  13. ?>

Chcę znaleźć w tablicy id === z GETa i pobrać name. Tym kodem znajduję id, ja mam znaleźć name. A może można jakoś prościej?
kapslokk
Jeśli tablica faktycznie wygląda tak jak pokazałeś, to nie jest tu potrzebna rekurencja. Wystarczy:

  1. <?php
  2. function jest($szukany, $colors){
  3. foreach($colors as $k=>$color){
  4. if($color['id'] == $szukany){
  5. return $color; // albo $color['name'] jesli potrzebujesz tylko name.
  6. }
  7. }
  8. return null;
  9. }
  10.  
lukaskolista
Zamiast sprawdzać $wartosc sprawdzaj $klucz i możesz pozbyć się ifa na is_array, bo klucz nie będzie array.
Kshyhoo
No chcę porównać klucz do tego z GETa a pobrać wartość.

Jak mam wyświetlić tę wartość, jeżeli tak:
  1. if (jest($szukany, $colors)) echo $szukany;
  2. else echo "BRAK";

to wciąż zwraca mi id mimo
  1. return $color['name'];
trueblue
  1. array_walk($array,function($item){
  2. if($item['id']===$_GET['id']){
  3. echo $item['name'];
  4. }
  5. });
Kshyhoo
Cytat
Notice: Undefined index: id in
trueblue
To podstaw coś z czym porównujesz klucz zamiast $_GET['id'].
Kshyhoo
Jak na żywca wpiszę liczbę, to znajduje.
nospor
nie === a ==
No juz moglbys takie rzeczy kojarzyc
kreatiff
Może takie coś zamiast funkcji?
  1. $b = array_column($a, 'name', 'id');
  2. echo $b[$_GET['color']] questionmark.gif 'brak';
W miejscu tej ikony jest podwójny pytajnik. Tylko się zmienia na ikonkę właśnie.
Kshyhoo
Nie o to chodzi. Tak:
  1. array_walk($colors, function($item) {
  2. if($item['id'] == $szukany) {
  3. echo $item['name'];
  4. }
  5. });
Dostaję komunikat Notice: Undefined variable: szukany in
nospor
No bo przeciez w tej funkcji nie masz ustawionej zmiennej $szukany :/
Kshyhoo
Kombinuję, ale nie wiem jak.
Pyton_000
@kreatiff dał Ci odpowiedź wink.gif
trueblue
  1. array_walk($arr, function($item,$key,$szukany) {
  2. if($item['id'] == $szukany) {
  3. echo $item['name'];
  4. }
  5. },$_GET['id']);
Spawnm
Po co array_walk? Dostałeś odpowiedź z array_column
Jeśli ma szukać po id dajesz array_column($a, 'id', 'name');
Kshyhoo
Namieszaliście mi tak we łbie, że już nic nie wiem...

Cytat(kreatiff @ 14.09.2016, 16:33:59 ) *
Może takie coś zamiast funkcji?
  1. $b = array_column($a, 'name', 'id');
  2. echo $b[$_GET['color']] questionmark.gif 'brak';
W miejscu tej ikony jest podwójny pytajnik. Tylko się zmienia na ikonkę właśnie.

Nie mam PHP7 niestety.
Spawnm
A jakie masz?
PHP 5 >= 5.5.0
Kshyhoo
5.6.18
Szukam np. id=1. Jak robię tak, to dostanę pierwszy klucz:
  1. $key = array_search(1, array_column($tablica, 'id'));

Czyli 2 a nie wartość.
Spawnm
Po co ci ten array_search i czemu nie ma 3 parametru w array_column? Nie wiem co ty robisz o.O
kreatiff
Zmień 2 linię w tym moim przykłądzie na takie cos:
  1. if ( isset($b[$_GET['color']]) ) echo $b[$_GET['color']];
  2. else echo 'brak';
Kshyhoo
I o to chodziło. Pięknie dziękuję.
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.