Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Wyszukanie w tablicy i pobranie
Kshyhoo
post 14.09.2016, 14:20:18
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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?


--------------------
Go to the top of the page
+Quote Post
kapslokk
post 14.09.2016, 14:38:28
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował kapslokk 14.09.2016, 14:39:33
Go to the top of the page
+Quote Post
lukaskolista
post 14.09.2016, 14:39:02
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Zamiast sprawdzać $wartosc sprawdzaj $klucz i możesz pozbyć się ifa na is_array, bo klucz nie będzie array.
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 15:01:13
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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'];


--------------------
Go to the top of the page
+Quote Post
trueblue
post 14.09.2016, 15:17:29
Post #5





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. array_walk($array,function($item){
  2. if($item['id']===$_GET['id']){
  3. echo $item['name'];
  4. }
  5. });


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 15:21:58
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat
Notice: Undefined index: id in


--------------------
Go to the top of the page
+Quote Post
trueblue
post 14.09.2016, 15:23:43
Post #7





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


To podstaw coś z czym porównujesz klucz zamiast $_GET['id'].


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 15:29:01
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Jak na żywca wpiszę liczbę, to znajduje.


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.09.2016, 15:31:31
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie === a ==
No juz moglbys takie rzeczy kojarzyc


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kreatiff
post 14.09.2016, 15:33:59
Post #10





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kreatiff 14.09.2016, 15:35:37
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 15:34:34
Post #11





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.09.2016, 15:35:22
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo przeciez w tej funkcji nie masz ustawionej zmiennej $szukany :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 15:51:33
Post #13





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Kombinuję, ale nie wiem jak.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 14.09.2016, 15:57:30
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


@kreatiff dał Ci odpowiedź wink.gif
Go to the top of the page
+Quote Post
trueblue
post 14.09.2016, 15:57:51
Post #15





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. array_walk($arr, function($item,$key,$szukany) {
  2. if($item['id'] == $szukany) {
  3. echo $item['name'];
  4. }
  5. },$_GET['id']);


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 14.09.2016, 16:03:20
Post #16





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Po co array_walk? Dostałeś odpowiedź z array_column
Jeśli ma szukać po id dajesz array_column($a, 'id', 'name');
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 18:25:41
Post #17





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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.


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 14.09.2016, 18:40:02
Post #18





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




A jakie masz?
PHP 5 >= 5.5.0
Go to the top of the page
+Quote Post
Kshyhoo
post 14.09.2016, 18:46:05
Post #19





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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ść.


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 14.09.2016, 19:01:22
Post #20





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Po co ci ten array_search i czemu nie ma 3 parametru w array_column? Nie wiem co ty robisz o.O
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 16:48