Skip to content

Instantly share code, notes, and snippets.

@vgrish
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vgrish/b32e0b5407e367d66f46 to your computer and use it in GitHub Desktop.
Save vgrish/b32e0b5407e367d66f46 to your computer and use it in GitHub Desktop.
<?php
/**
* Проверка существования элемента с определенным индексом в массиве. Специально для сайта http://modcoach.info
*
* @category test
* @version 0.2
* @license GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.htlm
* @param int $range размер создаваемого массива (на выходе получится массив в 2 раза больше @see getArr)
* @param int $run число прогонов по функции
* @author Agel_Nash <Agel_Nash@xaker.ru>
*/
$range = 200; //Размер массива
$run = 100; //Колличество поисков
$mode = isset($_GET['mode']) ? $_GET['mode'] : '';
$time = 0;
$arr = getArr($range); //Создаем массив
for($i=$run; $i>0; $i--){
$find = (mt_rand(0,1) ? 'несуществующий индекс' : array_rand($arr,1)); //Определяем какой индекс будем искать
switch($mode){
case 1:{
if($i==$run) echo '<h2>Проверка при помощи функции array_key_exists</h2>';
$time += show(
microtime(true)
,$find
,(is_array($arr) && array_key_exists($find,$arr)) //Условие для проверки
);
break;
}
case 2:{
if($i==$run) echo '<h2>isset с использованием empty для проверки на пустое значение</h2>';
$time += show(
microtime(true)
,$find
,(isset($arr[$find]) && is_scalar($arr[$find]) && (!empty($arr[$find]) || 0==$arr[$find])) //Условие для проверки
);
break;
}
case 3:{
if($i==$run) echo '<h2>Проверяем создан ли элемент в массиве. Но не находим элементы со значением null</h2>';
$time += show(
microtime(true)
,$find
,(isset($arr[$find]))
);
break;
}
case 4:{
if($i==$run) echo '<h2>isset с проверкой на пустое значение</h2>';
$time += show(
microtime(true)
,$find
,(isset($arr[$find]) && is_scalar($arr[$find]) && ''!=$arr[$find]) //Условие для проверки
);
break;
}
case 4:{
if($i==$run) echo '<h2>Проверяем создан ли элемент в массиве. Но не находим элементы со значением null</h2>';
$time += show(
microtime(true)
,$find
,(isset($arr[$find]) && is_scalar($arr[$find]) && ''!=$arr[$find]) //Условие для проверки
);
break;
}
default:{
echo '<h1 style="color:#a0a0a0">Для запуска теста используйте значение $_GET["mode"] от 1 до 4</h1>';
$i = 0;
}
}
}
unset($i,$find);
$tmp = array();
for($j=1; $j<=4; $j++){
$tmp[] = '<a href="'.$_SERVER['PHP_SELF'].'?mode='.$j.'">'.$j.'</a>';
}
echo "<p><u><em>Тесты:</em></u> ".implode(" | ",$tmp)."</p>";
unset($tmp,$j);
if($time>0){
echo sprintf('<h1>На <strong style="color:blue">%d</strong> запусков было потрачено <strong style="color:blue">%f</strong> сек.</h1>',$run,$time);
unset($run,$time);
if(count($arr) <= 2000){
echo '<h2>Содержимое массива $arr</h2><pre>';
var_export($arr);
echo "</pre>";
}
unset($arr);
}
/**
* @category init
* @version 0.1
* @license GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.htlm
* @param getArr $range размерность создаваемых массивов
* @return array массив с данными
*/
function getArr($range){
$arrInt = range(0, $range); //Создаем массив array(0=>1, 1=>2 , 2=>3, ... (n-1)=>n); где n = $range
$arrNull = array_fill(0, $range, null); //Создаем массив с $range элементами значение которых null
return array_merge($arrInt, $_SERVER, $arrNull); //Смешиваем все массивы
}
/**
* @category template
* @version 0.1
* @license GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.htlm
* @param float $time Время когда началась обработка
* @param string $key имя искомого индекса
* @param boolean $data результат проверки
* @return float итоговое время обработки массива
*/
function show($time, $key, $data){
$time = (microtime(true) - $time);
echo sprintf(
'<strong>Поиск элемента с индексом <u>%s</u> в массиве $arr</strong><br />
<u>%s</u><br />
Затрачено времени: <strong> %f </strong> сек.<hr />'
,$key
,($data ? '<span style="color:blue">Элемент найден' : '<span style="color:red">Нет элемента</span>')
,$time
);
return $time;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment