mirsite

      главная страница     письмо     Добавить в избранное

    PHP // MySQL // .htaccess


   Об авторе >>>



Главная страница

PHP

     Статьи

     Функции

       Строки

       Массивы

       Файлы и файловая система

       Работа с сетью

       Дата и время

       Специальные

       Регулярные выражения (POSIX)

     Книги

MySQL

Apache и .htaccess

Полезные сервисы

Новости

Ссылки

Карта сайта



Массивы



array_search

PHP 4 >= 4.0.5, PHP 5

Функция array_search служит для поиска значения в массиве. В случае удачи она возвращает ключ искомого значения, если ничего не найдено - возвращает FALSE. До версии PHP 4.2.0, array_search() при неудаче возвращала NULL, а не FALSE.

Синтаксис функции mixed array_search ( mixed needle, array haystack [, bool strict] ).

<?php

$array 
= array(12172279);

$key array_search(17$arraytrue); // $key = 1;
$key array_search("17"$array); // $key = 1;
$key array_search("17"$arraytrue); // FALSE;

?>


Если значение needle (то, что ищем в массиве), является строкой, то производится регистро-зависимое сравнение.

Если передать в функцию в качестве третьего параметра (это не обязательно) значение TRUE, то поиск будет производится с учетом типа переменной.

Если искомое значение встречается в массиве несколько раз, то функция вернет только один - первый найденый ключ.

Эта функция очень полезна, так как она обеспечивает очень высокую скорость поиска, значительно выше чем при переборе значений массива в цикле. Особое значение это имеет при поиске в больших массивах.

Средняя скорость поиска значения в массиве в секундах:

Число элементов массива  

array_search  

Цикл foreach 

Цикл while  

10

0.0000068

0.0000064

0.0000076

100

0.0000078

0.0000153

0.0000185

1000

0.0000209

0.0001177

0.0001351

10000

0.0004210

0.0012128

0.0018670

100000

0.0039679

0.0130989

0.0175215



Видно, что с ростом числа элементов заметно увеличивается время поиска при помощи циклов. Время поиска при помощи функции array_search() увеличивается, но не столь значительно.

Ниже приводится код программы, с помощью которой произведены эти расчеты.

<?php

$mass
=100000// число значений в массиве в котором будем искать
$search=50000// в массиве будем искать это значение
$first_result=array();  // массив результатов, для вычисления среднего значения первого варианта
$second_result=array(); // массив результатов, для вычисления среднего значения второго варианта
$third_result=array();  // массив результатов, для вычисления среднего значения третьего варианта

// создаем массив значений и наполняем его 
$test_array range(0$mass-1);


// цикл для подсчета средних значений 
for ($d=0$d<30$d++) {

//*************** Поиск с помощью array_search *******************

// Запускаем подсчет времени
$time_start microtime(1);
// поиск
$key array_search($search$test_arraytrue);
// если нашли
if ($key!==FALSE// надо именно !== а не !=, ведь номер первого элемента - 0
  
{
   echo 
$test_array[$key];
  }
$time_end microtime(1);
// конец подсчета времени

// пишем в массив значений
$first_result[]= $time_end $time_start;

//*************** Поиск по массиву с циклом foreach *******************

// Запускаем подсчет времени
$time_start microtime(1);
// сам поиск
foreach ($test_array as $ta)
{
 if (
$ta==$search)
 {
  echo 
$ta
  break;
 }
}
$time_end microtime(1);
// конец подсчета времени

// пишем в массив значений
$second_result[]= $time_end $time_start;

//*************** Поиск по массиву с циклом while *******************

// Запускаем подсчет времени
$time_start microtime(1);

// определяем длину массива
$count=count($test_array);
$j=0;
// сам поиск
while ($j<$count)
{
 if (
$test_array[$j]==$search// если нашли
    
{
     echo 
$test_array[$j]; 
     break;
    }
 
$j++;
}
$time_end microtime(1);
// конец подсчета времени

// пишем в массив значений
$third_result[]= $time_end $time_start;
}

$srednee1=array_sum ($first_result)/count($first_result);
$srednee2=array_sum ($second_result)/count($second_result);
$srednee3=array_sum ($third_result)/count($third_result);

printf('<b>первый код выполнен в среднем за : %.7f секунды</b>'$srednee1);
printf('<b>второй код выполнен в среднем за : %.7f секунды</b>'$srednee2);
printf('<b>третий код выполнен в среднем за : %.7f секунды</b>'$srednee3);

// результат:
// первый код выполнен в среднем за : 0.0000295 секунды
// второй код выполнен в среднем за : 0.0153386 секунды
// третий код выполнен в среднем за : 0.0226001 секунды

?>



Все функции раздела >>>




  

Александр Мироненко, MirSite.ru © 2005-2014       
Сайт обновлен 24 июня 2019 года