Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Szukanie klucza - tablica wialowymiarowa
Forum PHP.pl > Forum > Przedszkole
browar231
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.
Crozin
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ą.
Adi32
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.
browar231
Crozin, czyli jakaś pętla, tak? Lepsza będzie for czy while.
Adi32, trochę nie za bardzo Cię rozumiem.
Crozin
Bez znaczenia, co będzie Ci w danej sytuacji wygodniej.
browar231
  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?
gorden
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ść.
Adi32
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. }
Crozin
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. }
browar231
Dzięki Wam. Można zamknąć.
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.