PHP: array_search - szybkie przeszukiwanie tablicy. PHP array_search: wyszukiwanie wartości w tablicy Szybkie wyszukiwanie w tablicy php

💖 Podoba Ci się? Udostępnij link swoim znajomym

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()

$array = array(0 => „niebieski” , ​​1 => „czerwony” , 2 => 0x000000 , 3 => „zielony” , 4 => „czerwony” );$key = array_search („czerwony” , $tablica); // $klucz = 1;
$key = array_search("zielony" , $tablica); // $klucz = 2; (0x000000 == 0 == „zielony”)
$key = array_search („zielony”, $array, true); // $klucz = 3;
?>
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ę.

Powiedz przyjaciołom