СУБД/лекция 7 семестр 2 (раздел)/Функции PHP для работы с массивами
Содержание |
array_search
Функция array_search служит для поиска значения в массиве. В случае удачи она возвращает ключ искомого значения, если ничего не найдено - возвращает FALSE. До версии PHP 4.2.0, array_search() при неудаче возвращала NULL, а не FALSE.
Синтаксис функции
mixed array_search ( mixed needle, array haystack [, bool strict] ).
<?php $array = array(12, 17, 22, 79); $key = array_search(17, $array, true); // $key = 1; $key = array_search("17", $array); // $key = 1; $key = array_search("17", $array, true); // 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_array, true); // если нашли 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 секунды ?>
count
Функция count применяется для подсчета количества элементов в массиве (или количества свойств объекта).
Функция возвращает число элементов массива.
<?php $a[0] = 1; $a[1] = 3; $a[2] = 5; echo count($a); // выведет 3 ?>
<?php $a = 23; echo count($a); // выведет 1 ?> <?php echo count(false); // выведет 1 ?>
И только если переменная равна null или вообще не определена, функция count вернет 0.
<?php $a=null; echo count($a); // выведет 0 ?>
Впрочем, есть еще один вполне логичный вариант, когда count возвращает 0 - если она считает элементы пустого массива:
<?php $b=array(); echo count($b); // выведет 0 ?>
В версиях PHP >= 4.2.0 функция count может использоваться рекурсивно, для подсчета всех элементов многомерных массивов, иногда возникает необходимость и в этом. В таком случает нужно добавить дополнительный аргумент COUNT_RECURSIVE, или просто 1.
<?php $arr = array ( 'a' => array('11', '12', '13'), 'b' => array('x', 'y', 'z')); // рекурсивный count echo count($arr, COUNT_RECURSIVE); // или count($arr, 1); // вернет 8 // обычный count echo count($arr); // то есть по сути это count($arr, 0); // вернет 2 ?>