Last active
August 29, 2015 14:18
-
-
Save vgrish/b32e0b5407e367d66f46 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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