Mam funkcję analizy tablicy, która wyszukuje częściowe dopasowania słów w wartościach. Jak sprawić, by była rekurencyjna, aby działała dla tablic wielowymiarowych?

function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (false !== stripos($needle, $value)) {
            return $key;
        }
    }
    return false;
}

Tablica, którą muszę przeszukać

array(
 [0] =>
  array(
   ['text'] =>'some text A'
   ['id'] =>'some int 1'
 )
 [1] =>
  array(
   ['text'] =>'some text B'
   ['id'] =>'some int 2'
 )
 [2] =>
  array(
  ['text'] =>'some text C'
  ['id'] =>'some int 3'
 )
 [3] =>
  array(
  ['text'] =>'some text D'
  ['id'] =>'some int 4'
 ) 
etc.. 
1
Chamilyan 3 sierpień 2011, 22:25

3 odpowiedzi

Najlepsza odpowiedź
function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            return $key . '->' . array_find($needle, $value);
        } else if (false !== stripos($needle, $value)) {
            return $key;
        }
    }
    return false;
}
2
David Chan 3 sierpień 2011, 23:03
Możesz zmodyfikować tę funkcję, aby zwrócić tablicę kluczy do igły docelowej, ja dam ci bułkę tartą jak ciąg.
 – 
David Chan
3 sierpień 2011, 23:06
Dobre wywołanie identyfikacji macierzy nadrzędnej w wyniku wyjściowym.
 – 
65Fbef05
3 sierpień 2011, 23:07

Będziesz chciał przeciążyć swoją funkcję testem tablicowym...

function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            array_find($needle, $value);
        } else {
            if (false !== stripos($needle, $value)) {
                return $key;
            }
        }
    }
    return false;
}
1
65Fbef05 3 sierpień 2011, 23:03
Przepraszam, że okno było otwarte tak długo 65Fbef05 pokonało mnie tym samym rozwiązaniem
 – 
David Chan
3 sierpień 2011, 23:05