«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

СУБД/лекция 7 семестр 2 (раздел)/Функции PHP для работы с массивами

Материал из Wiki
Перейти к: навигация, поиск

Содержание

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
?>
Если эту функцию применить к переменной, не являющейся массивом, например, к числу или строке, то оно вернет значение 1. Запомнить это просто - строка, это один единый элемент.
<?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
 
?>