Wiem że istnieją funkcje in_array i array_search ale nie zadowalają mnie one.
Załóżmy że mam taką tablicę:
Kod
$tablica = array('brzoskwinia','winogrona','banan','truskawka','ananas','banan');
i teraz jeżeli użyłbym zwykłej funkcji in_array()
Kod
$string = 'banan';
echo in_array($string,$tablica);
echo in_array($string,$tablica);
Powyższy kod zwróciłby mi jedynie "1" - czyli że znalazł 'banan' w tej tablicy
Więc mógłbym tylko rozpoznać czy 'banan' występuje w tablicy czy nie.. i potem ewentualnie działać coś dalej.
Rozbudowa, o której pisałem wcześniej polegałaby na tym że:
1. funkcja będzie zwracać pozycję i znalezioną wartość
2. nie będzie zwracać uwagi na wielkośc liter (jak spróbuje wyszukać Banan za pomocą funkcji in_array to zwróci mi 0 bo nie ma 'Banan' tylko 'banan')
3. będzie zwracać wyniki jeśli $string będzie się zawierać, w którejś wartości z tablicy
Obecnie 2 pierwsze punkty mam z głowy bo znalazłem taką funkcję
Kod
function in_array_modifed($string, $array) {
return preg_grep('/^' . preg_quote($string, '/') . '$/i', $array);
}
return preg_grep('/^' . preg_quote($string, '/') . '$/i', $array);
}
Ta funkcja nie jest wrażliwa na wielkośc liter i jeżeli wyszukam 'Banan' to zwróci mi tak samo wynik jakbym wpisał 'banan'.
Po drugie nie zwraca tylko 0/1 (nie znaleziono/znaleziono) tylko zwraca mi ładną tablicę z wszystkimi znalezionymi wynikami i na którym miejscu w tablicy one się znajdują.
Przykład:
Kod
$tablica = array('brzoskwinia','winogrona','banan','truskawka','ananas','banan');
$string = 'banan';
function in_array_modifed($string, $array) {
return preg_grep('/^' . preg_quote($string, '/') . '$/i', $array);
}
$wynik = in_array_modifed($string,$tablica);
echo "<pre>";
echo var_dump($wynik);
echo "</pre>";
$string = 'banan';
function in_array_modifed($string, $array) {
return preg_grep('/^' . preg_quote($string, '/') . '$/i', $array);
}
$wynik = in_array_modifed($string,$tablica);
echo "<pre>";
echo var_dump($wynik);
echo "</pre>";
zwróci:
Kod
array(2) {
[2]=>
string(5) "banan"
[5]=>
string(5) "banan"
}
[2]=>
string(5) "banan"
[5]=>
string(5) "banan"
}
Natomiast problem pojawia się przy 3 punkcie. Chciałbym aby częsciowe wyszukiwanie również działało.
Obecnie gdyby $string był równy 'ana' to funkcja nic nie zwróci bo nie ma 'ana' w tablicy.
A chciałbym żeby zwróciła wszystkie wartości, w których zawiera się ciąg 'ana'.. w tym przypadku byłoby to:
[2] => "banan"
[4] => "ananas"
[5] => "banan"
Nie wiem jak użyć strpos() w tej funkcji - bez utraty innych właściwości, które wypunktowałem wyżej.