Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Szukanie klucza - tablica wialowymiarowa
browar231
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.08.2011

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


Pytałem już wujka Google, ale 'php tablica wielowymiarowa szukanie klucza' nic mu chyba nie mówi.
No więc mam sobie mniej więcej taką tablicę:
  1. $tablica[0]['name'] = 'Lorem';
  2. $tablica[0]['desc'] = 'Ipsum';
  3.  
  4. $tablica[1]['name'] = 'Lorem123';
  5. $tablica[1]['desc'] = 'Ipsum123';


I chciałbym znaleźć klucz tablicy, w której opis jest równy 'Ipsum123'.

Inaczej:
  1. $tablica[$x]['desc'] == 'Ipsum123';

i chcę znaleźć $x.

Z góry dziękuje za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli masz jedynie taką tablicę - bez żadnego indeksu itp. - to jedyne co możesz zrobić to przelecieć po wszystkich elementach tablicy i porównywać ich wartość z szukaną.
Go to the top of the page
+Quote Post
Adi32
post
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Możesz też zrobić funkcję rekurencyjną. W tedy ile by nie było wymiarów to i tak znajdziesz klucz a nawet ścieżkę kluczy.
Go to the top of the page
+Quote Post
browar231
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.08.2011

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


Crozin, czyli jakaś pętla, tak? Lepsza będzie for czy while.
Adi32, trochę nie za bardzo Cię rozumiem.
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Bez znaczenia, co będzie Ci w danej sytuacji wygodniej.
Go to the top of the page
+Quote Post
browar231
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.08.2011

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


  1. function szukajKlucza($tablica, $val){
  2. for($i=0, $j=count($tablica); $i<=$j; $i++){
  3. if($tablica[$i]['desc'] == $val){
  4. break;
  5. };
  6. };
  7. return $i;
  8. };


Coś w tym stylu?
A jak powiadomić, że nie znalazło klucza?

Ten post edytował browar231 26.12.2011, 18:39:07
Go to the top of the page
+Quote Post
gorden
post
Post #7





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


jeśli działa, to znaczy, że dobrze. i po co te średniki po nawiasach klamrowych? do przelatywania przez tablice możesz użyć foreach. możesz utworzyć nową zmienną i w niej zapisać czy znalazło szukaną wartość.
Go to the top of the page
+Quote Post
Adi32
post
Post #8





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Co do pętli to ja zawsze do tablic polecam foreach.
Funkcja rekurencyjna to kata, która odpala sama siebie. Nie zaleca się korzystanie z takich fukncji chyba, że nie ma innego wyjścia ale o tym możesz poczytać na necie.

  1.  
  2. function getKey($array,$search,$roat='') {
  3.  
  4. foreach ($array as $key => $value) {
  5.  
  6. $keys = $roat.'/'.$key;
  7.  
  8. if (is_array($value)) {
  9.  
  10. getKey($value,$search,$keys);
  11.  
  12. } else {
  13.  
  14. if ($search == $value) {
  15.  
  16. $funds[] = $keys;
  17.  
  18. }
  19.  
  20. }
  21.  
  22. }
  23.  
  24. if ($funds) {
  25. return $funds;
  26. }
  27.  
  28. return false;
  29.  
  30. }
  31.  


Odpalasz:

  1. if ($funds = getKey($tablicaWieloWymiarowa,'szukana wartość')) {
  2. // jakoś sobie korzystasz z tablicy z wynikami
  3. } else {
  4. // nic nie znaleziono
  5. }


Ten post edytował Adi32 26.12.2011, 18:49:31
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W chwili obecnej funkcja zwróci Ci indeks ostatniego elementu w przypadku gdy nie znaleziono żadnego pasującego elementu.
  1. function ...(array $array, $key) {
  2. foreach ($array as $key => $item) {
  3. if ($item['desc'] == $key) {
  4. return $key;
  5. }
  6. }
  7.  
  8. return -1;
  9. }
Go to the top of the page
+Quote Post
browar231
post
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 22.08.2011

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


Dzięki Wam. Można zamknąć.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 12:35