Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyciaganie elementu z tablicy wielowymiarowej
motorolka24
post 17.02.2011, 00:23:24
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 21.04.2007

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


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. );
Go to the top of the page
+Quote Post
darko
post 17.02.2011, 00:39:26
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
motorolka24
post 17.02.2011, 13:08:46
Post #3





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 21.04.2007

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


ale jako to zrobić jak się nie wie jaki jest klucz elementu tablicy. Chce wyszukać element np dla id = 1 albo url = "aa.html"
Go to the top of the page
+Quote Post
darko
post 17.02.2011, 14:56:33
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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 )


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Pawel_W
post 17.02.2011, 16:38:36
Post #5





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


a o array_search słyszeliście? wink.gif

w komentarzach użytkowników jest przeszukiwanie wielowymiarowe, o ile dobrze pamiętam
Go to the top of the page
+Quote Post
motorolka24
post 17.02.2011, 18:27:56
Post #6





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 21.04.2007

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


Pawel_W mógłbyś napisać jak to zrobić?
Go to the top of the page
+Quote Post
kefirek
post 17.02.2011, 19:54:03
Post #7





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  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'];
Go to the top of the page
+Quote Post
darko
post 18.02.2011, 02:34:25
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


~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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
TheRiko
post 22.02.2012, 20:31:56
Post #9





Grupa: Zarejestrowani
Postów: 37
Pomógł: 1
Dołączył: 10.09.2006

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


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

Ten post edytował TheRiko 22.02.2012, 21:02:06
Go to the top of the page
+Quote Post

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.08.2025 - 12:56