Wyszukiwanie wartości w tablicy wymagane jest niemal w każdej aplikacji PHP i skrypcie pracującym z danymi, dla których istnieje wiele metod i funkcji specjalnych. W zależności od zadania i rodzaju wyszukiwania należy skorzystać z określonych narzędzi, biorąc pod uwagę ich cechy, szybkość wykonania i łatwość obsługi. Następnie zapoznamy się z funkcjami PHP służącymi do wyszukiwania elementów tablicy, możliwymi konstrukcjami i metodami, a także dowiemy się, która metoda jest najszybsza.
Funkcje wyszukiwania w tablicy:
wyszukiwanie_tablicy- używany do wyszukiwania wartości w tablicy. Jeśli się powiedzie, zwraca klucz szukanej wartości; jeśli nic nie zostanie znalezione, zwraca FAŁSZ. Przed wersją PHP 4.2.0 array_search() w przypadku niepowodzenia zwracała NULL zamiast FALSE.
Składnia funkcji mieszanej array_search (mieszana igła, tablica haystack [, bool strict]).
foreach (wyrażenie_tablicy jako wartość $)
oświadczenie
foreach (wyrażenie_tablicy jako $klucz => $wartość)
oświadczenie
Przykład użycia funkcji z konstrukcją fore w celu wyszukania elementu tablicy i zwrócenia wartości TRUE w przypadku powodzenia
Składnia konstrukcji
podczas gdy (wyrażenie)
oświadczenie
W przypadku powodzenia zwraca klucz elementu tablicy
Z tabeli miar widać, że funkcja wyszukiwanie_tablicy, pokazuje najlepsze wyniki zarówno podczas wyszukiwania w małych, jak i dużych tablicach. Jednocześnie czas wyszukiwania za pomocą pętli znacznie wzrasta w zależności od rozmiaru tablicy.
Jedną z głównych operacji podczas pracy z tablicami jest wyszukiwanie określonej wartości. Służy do tego funkcja PHP array_search(). Potrafi przetwarzać zarówno zbiory jednowymiarowe, jak i asocjacyjne, zwracając klucz szukanej wartości, jeśli zostanie znaleziona w tablicy.
Składnia
Sformalizowany opis funkcji array_search() w PHP jest następujący:
Mieszane wyszukiwanie_tablicy (wartość mieszana, tablica $kolekcja [, bool ścisłe])
Parametry wejściowe:
- $kolekcja - tablica, w której będzie przeprowadzane wyszukiwanie;
- wartość - żądana wartość dowolnego typu;
- strict to opcjonalna flaga logiczna, która ustawia mechanizm porównywania ścisłego uwzględniającego typy.
Mechanizm działania
Funkcja PHP array_search() porównuje wartość jedna po drugiej ze wszystkimi wartościami w tablicy kolekcji. Domyślnie porównanie jest wykonywane bez względu na typy operandów. To ustawienie można zmienić, ustawiając flagę ścisłą na TRUE. W porównaniach ciągów rozróżniana jest wielkość liter.
Jeśli zostanie znalezione dopasowanie, zwracany jest klucz odpowiadający znalezionemu elementowi i funkcja przestaje działać. Dlatego nie można go używać do wykrywania wielokrotnych wystąpień żądanej wartości w tablicy.
Jeśli nie zostaną znalezione żadne dopasowania, funkcja zwróci wartość logiczną FAŁSZ.
Powinieneś sprawdzić zwrócony wynik za pomocą ścisłego operatora równości (===). Jest to ważne, ponieważ funkcja może zwrócić wartość rzutowaną na FAŁSZ, na przykład 0 lub pusty ciąg znaków.
Przykłady użycia
Przykład 1. Przy przekazywaniu tablicy wielowymiarowej do funkcji PHP array_search() efektem pracy będzie klucz szukanego elementu.
"zima", "sezon2" => "wiosna", "sezon3" => "lato", "sezon4" => "jesień"); $result1 = array_search("zima", $array); $result2 = array_search("lato", $array); $result3 = array_search("kwiecień", $tablica); ?>
W tym przykładzie $result1 zostanie ustawione na „sezon1”, $result2 zostanie ustawione na „sezon3”, a $result3 zostanie ustawione na wartość logiczną FALSE, ponieważ ciąg „kwiecień” nie pojawia się w tablicy źródłowej.
Przykład 2. Funkcja PHP array_search() może również przetwarzać tablicę jednowymiarową, traktując jej klucze jako następujące indeksy numeryczne.
Zmienna $result zostanie ustawiona na 1, zgodnie z indeksem elementu „hunter” w tablicy $.
Przykład 3. Możliwy błąd podczas analizy wyniku.
„Waszyngton”, 1 => „Adams”, 2 => „Jefferson”, 3 => „Madison”, 4 => „Monroe”); $result = array_search("Waszyngton", $prezydenci); if (!$result) ( echo "G. Washington nie był pierwszym prezydentem USA"; ) ?>
Tak więc, bez sprawdzania wyniku ze ścisłą równością, możesz otrzymać nieoczekiwany komunikat, że George Washington nie był pierwszym prezydentem Stanów Zjednoczonych.
Przykład 4: Zwracany jest tylko klucz pierwszego znalezionego dopasowania.
Mimo że szukana wartość występuje w tablicy trzy razy, funkcja zwróci tylko pierwszy znaleziony wynik - 0. Aby znaleźć wiele dopasowań, zaleca się użycie funkcji PHP array_keys().
Funkcji array_search() używam już od dłuższego czasu do wyszukiwania wartości w tablicy, gdyż wielokrotnie słyszałem i czytałem, że działa to zauważalnie szybciej niż przeszukiwanie tablicy w pętli, ale tego nie zrobiłem wiedzieć, o ile jest szybszy. W końcu zabrałem się za sprawdzenie i policzenie osobiście.
Porównałem szybkość przeszukiwania tablicy przy użyciu tej funkcji ze zwykłym przeszukiwaniem tablicy w pętlach foreach i while. Na 10-100 elementach tablicy różnica jest niezauważalna, a czas jest tak krótki, że można go pominąć. Jednak w przypadku dużych tablic różnica okazała się dość znacząca. Wraz ze wzrostem rozmiaru tablicy o rząd wielkości czas wyszukiwania również znacznie się wydłużył. Przy stu tysiącach elementów prędkość fore spadła do 0,013 sekundy, a while do 0,017, natomiast array_search() również zwolniła, ale nadal pozostała o rząd wielkości większa - 0,004 sekundy. W przypadku dużego skryptu pracującego z dużymi tablicami zastąpienie wyszukiwania w pętli wyszukiwaniem za pomocą array_search() nie będzie wcale „optymalizacją pcheł”.
W związku z tym przypomniałem sobie niedawną dyskusję z jednym z moich kolegów w pracy na temat tego, czy programista musi znać wszystkie te wbudowane funkcje językowe, czy też wystarczy „nastawienie programisty” i wiedza ogólna. Nie wchodząc w dyskusję na temat tego sposobu myślenia, myślę, że nadal musisz znać funkcje, może nie całą składnię szczegółowo, ale przynajmniej jakie istnieją funkcje i ogólnie do czego służą.
UPD: Ty też potrzebujesz nastawienia programisty! A uważanie na pamięć nie zaszkodzi (inspirowane breakiem i zasięgiem:)
Poniżej hacka znajduje się kod skryptu, który został użyty do obliczenia czasu:
$masa=100000; // liczba wartości w tablicy, w której będziemy szukać
$wyszukiwanie=50000; // będziemy szukać tej wartości w tablicy
$pierwszy_wynik=tablica(); // tablica wyników do obliczenia średniej wartości pierwszej opcji
$drugi wynik=tablica(); // tablica wyników do obliczenia średniej wartości drugiej opcji
$trzeci_wynik=tablica(); // tablica wyników do obliczenia średniej wartości trzeciej opcji
// utwórz i wypełnij tablicę
$test_array = zakres(0, $masa-1); // dzięki SelenIT))
/*
$test_tablica=tablica();
dla ($i=0; $i<$mass; $i++)
{
$test_array=$i;
}
*/
// pętla do obliczania wartości średnich
dla ($d=0; $d<30; $d++) {
//*************** Szukaj za pomocą array_search *********************
// Zacznij odliczać czas
$time_start = mikroczas(1);
// szukaj
$key = array_search($search, $test_array, true);
// Jeśli znaleziono
if ($key!==FALSE) // potrzebujemy dokładnie!== i nie!=, ponieważ numer pierwszego elementu wynosi 0
{
echo $tablica_testowa[$klucz];
}
$time_end = mikroczas(1);
// koniec odliczania czasu
// zapis do tablicy wartości
$first_result= $time_end - $time_start;
//*************** Przeszukiwanie tablicy za pomocą pętli foreach *********************
// Zacznij odliczać czas
$time_start = mikroczas(1);
// samo wyszukiwanie
foreach ($test_array jako $ta)
{
jeśli ($ta==$wyszukiwanie)
{
echo $ta;
przerwa;
}
}
$time_end = mikroczas(1);
// koniec odliczania czasu
// zapis do tablicy wartości
$sekundowy wynik= $time_end - $time_start;
//*************** Przeszukiwanie tablicy za pomocą pętli while *********************
// Zacznij odliczać czas
$time_start = mikroczas(1);
// określ długość tablicy
$liczba=liczba($test_tablica);
$j=0;
// samo wyszukiwanie
podczas gdy ($j<$count)
{
if ($test_array[$j]==$search) // jeśli znaleziono
{
echo $tablica_testowa[$j];
przerwa;
}
$j++;
}
$time_end = mikroczas(1);
// koniec odliczania czasu
// zapis do tablicy wartości
$trzeci_wynik= $time_end - $time_start;
}
$srednee1=array_sum($first_result)/count($first_result);
$srednee2=array_sum ($drugi_wynik)/count($drugi_wynik);
$srednee3=array_sum ($trzeci_wynik)/count($trzeci_wynik);
Printf("Średnio ukończony pierwszy kod: %.7f sekund", $srednee1);
printf("Drugi kod ukończony średnio w: %.7f sekund", $srednee2);
printf("Trzeci kod jest wykonywany średnio w: %.7f sekund", $srednee3);
// wynik:
// pierwszy kod ukończony średnio: 0,0000295 sekund
// drugi kod ukończony średnio: 0,0153386 sekundy
// trzeci kod ukończony średnio: 0,0226001 sekundy
(PHP 4 >= 4.0.5, PHP 5)
array_search — Wyszukuje daną wartość w tablicy i zwraca odpowiedni klucz, jeśli się powiedzie
Opis
mieszany wyszukiwanie_tablicy(mieszana igła, tablica stogu siana [, bool strict])Wyszukuje w stogu siana wartość igły i zwraca klucz, jeśli jest obecny w tablicy, FAŁSZ W przeciwnym razie.
Komentarz: Jeśli igła jest ciągiem znaków, wykonywane jest porównanie uwzględniające wielkość liter.
Komentarz: Do PHP 4.2.0, array_search() zwrócone w przypadku niepowodzenia ZERO zamiast FAŁSZ .
Jeśli przekażesz wartość PRAWDA jako opcjonalny trzeci parametr funkcji strict array_search() sprawdzi także rodzaj igły w stogu siana.
Jeżeli igła znajdzie się w stogu siana więcej niż raz, zwrócony zostanie pierwszy znaleziony klucz. Aby zwrócić klucze dla wszystkich znalezionych wartości, użyj funkcji array_keys() z opcjonalnym parametrem wartość_wyszukiwania.
Przykład 1: Przykład użycia array_search()
|
Uwaga |
Ta funkcja może zwrócić jako wartość logiczną FAŁSZ, wartość inna niż logiczna, na którą jest rzutowany FAŁSZ, na przykład 0 lub „”. Aby uzyskać więcej informacji, zobacz sekcję Typ logiczny. Użyj operatora ===, aby sprawdzić wartość zwracaną przez tę funkcję. |