Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyciaganie elementu z tablicy wielowymiarowej
Forum PHP.pl > Forum > Przedszkole
motorolka24
Jak można wyciągnąć z poniższej tablicy element array( "id" => "1","url" => "aa.html","name" => "aa") podając id = 1. Najlepiej żeby było to bez użycia pętli lub rekurencji
  1. $tablica = array( array( "id" => "1",
  2. "url" => "aa.html",
  3. "name" => "aa"
  4. ),
  5. array( "id" => "2",
  6. "url" => "bb.html",
  7. "name" => "bb",
  8. ),
  9. array( "id" => "3",
  10. "url" => "cc.html",
  11. "name" => "cc"
  12. )
  13. );
darko
Bez użycia pętli?
  1. $tablica = array(
  2. array( "id" => "1",
  3. "url" => "aa.html",
  4. "name" => "aa"
  5. ),
  6. array( "id" => "2",
  7. "url" => "bb.html",
  8. "name" => "bb",
  9. ),
  10. array( "id" => "3",
  11. "url" => "cc.html",
  12. "name" => "cc"
  13. )
  14. );
  15.  
  16. $tmp = array_values($tablica);
  17. print_r($tmp[0]);
motorolka24
ale jako to zrobić jak się nie wie jaki jest klucz elementu tablicy. Chce wyszukać element np dla id = 1 albo url = "aa.html"
darko
To teraz pytasz już o coś innego i moim zdaniem bez pętli się nie obejdzie jeśli chcesz wyszukać i zwrócić wynik w ten sposób, w jaki napisałeś. Trzeba zrobić przynajmniej jednego foreacha, który przejedzie po całej tablicy i wyszuka żądane wartości. Gdybyś chciał zwrócić tylko nazwę samego klucza to można byłoby użyć array_search, ale Tobie raczej nie o to chodzi, gdyż w rezultacie otrzymasz nazwę klucza "id" znalezioną po wartości (1), analogicznie jest w przypadku par url => wartość oraz name => wartość, czyli mamy:
  1. $tablica = array(
  2. array( "id" => "1",
  3. "url" => "aa.html",
  4. "name" => "aa"
  5. ),
  6. array( "id" => "2",
  7. "url" => "bb.html",
  8. "name" => "bb",
  9. ),
  10. array( "id" => "3",
  11. "url" => "cc.html",
  12. "name" => "cc"
  13. )
  14. );
  15.  
  16. $tmp = array_values($tablica);
  17. //print_r($tmp[0]);
  18. foreach($tmp as $t)
  19. {
  20. if(in_array('aa', $t))
  21. print_r($t);
  22. }

Można jeszcze ładniej:
  1. $tablica = array(
  2. array( "id" => "1",
  3. "url" => "aa.html",
  4. "name" => "aa"
  5. ),
  6. array( "id" => "2",
  7. "url" => "bb.html",
  8. "name" => "bb",
  9. ),
  10. array( "id" => "3",
  11. "url" => "cc.html",
  12. "name" => "cc"
  13. )
  14. );
  15. function search_for($array, $what)
  16. {
  17. $tmp = array_values($array);
  18. $return = false;
  19. foreach($tmp as $t)
  20. {
  21. if(in_array($what, $t))
  22. $return = $t;
  23. }
  24. return $return;
  25. }
  26. print_r(search_for($tablica, 'cc'));

// wynik:
Array ( [id] => 3 [url] => cc.html [name] => cc )
Pawel_W
a o array_search słyszeliście? wink.gif

w komentarzach użytkowników jest przeszukiwanie wielowymiarowe, o ile dobrze pamiętam
motorolka24
Pawel_W mógłbyś napisać jak to zrobić?
kefirek
  1. $tablica = array( array( "id" => "1",
  2. "url" => "aa.html",
  3. "name" => "aa"
  4. ),
  5. array( "id" => "2",
  6. "url" => "bb.html",
  7. "name" => "bb",
  8. ),
  9. array( "id" => "3",
  10. "url" => "cc.html",
  11. "name" => "cc"
  12. )
  13. );
  14.  
  15.  
  16. function array_search_i($str,$array){
  17. foreach($array as $key => $value) {
  18. if(array_search($str, $value)){
  19. return $key;
  20. }
  21. }
  22. return false;
  23. }
  24.  
  25. $key = array_search_i(1, $tablica);
  26.  
  27. echo $tablica[$key]['url'];
  28. echo $tablica[$key]['name'];
darko
~kefirek, ~Pawel_W o array_search słyszeliśmy ^^ i napisaliśmy o tym już wcześniej, ale zdaje się, że autorowi tematu nie chodziło o zwrócenie pojedynczej wartości (sparowanego z szukaną wartością klucza), co konkretnej tablicy jako całości, która zawiera albo 'id', albo 'url' albo 'name', co spełnia mój kod.
TheRiko
Witam.

Podłączę się do tematu. Mógłby mi ktoś powiedzieć (szczególnie darko, bo to o jego kod chodzi), jak przerobić tę funkcję, aby pokazywało również zdublowane wpisy?

Czyli jeśli moja tablica wygląda przykładowo tak:
  1. $tablica = array( array( "id" => "1",
  2. "polozenie" => "13,3",
  3. "nazwa" => "aa"
  4. ),
  5. array( "id" => "2",
  6. "polozenie" => "27,5",
  7. "nazwa" => "bb",
  8. ),
  9. array( "id" => "3",
  10. "polozenie" => "13,3",
  11. "nazwa" => "cc"
  12. )
  13. );

to czy da się coś zrobić, aby wylistowało mi wszystkie wpisy z polozeniem 13,3?

Wynik:
1. nazwa: aa
2. nazwa: cc
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.