<?php $haystack = Array(); for ($i = 0; $i < 1000000; $i++) { $haystack[] = rand(1, 2000); } $needle = rand(1, 2000); echo "__array_count_values()__n"; $start = microtime(true); $startmem = memory_get_usage(); $counts = array_count_values($haystack); $mem = memory_get_usage()-$startmem; echo 'Count:'.$counts[$needle]."n"; echo 'Time:'.(microtime(true) - $start)."n"; echo 'Memory:'.$mem."nn"; echo "__array_keys()__n"; $start = microtime(true); $startmem = memory_get_usage(); $keys = array_keys($haystack, $needle); $mem = memory_get_usage()-$startmem; echo 'Count:'.count($keys)."n"; echo 'Time:'.(microtime(true) - $start)."n"; echo 'Memory:'.$mem."nn"; echo '__$needle_array[]__'."n"; $start = microtime(true); $startmem = memory_get_usage(); $x = count($haystack); for($i = 0; $i < $x; $i++){ if($haystack[$i] == $needle){ $needle_array[] = $haystack[$i]; } } $mem = memory_get_usage()-$startmem; $number_of_instances = count($needle_array); echo 'Count:'.$number_of_instances."n"; echo 'Time:'.(microtime(true) - $start)."n"; echo 'Memory:'.$mem."nn"; echo '__$number_of_instances++__'."n"; $start = microtime(true); $startmem = memory_get_usage(); $x = count($haystack); $number_of_instances = 0; for($i = 0; $i < $x; $i++){ if($haystack[$i] == $needle){ $number_of_instances++; } } $mem = memory_get_usage()-$startmem; echo 'Count:'.$number_of_instances."n"; echo 'Time:'.(microtime(true) - $start)."n"; echo 'Memory:'.$mem."nn"; ?>
__array_count_values()__ Count:489 Time:0.0060000419616699 Memory:57392 __array_keys()__ Count:489 Time:0.002000093460083 Memory:16432 __$needle_array[]__ Count:489 Time:0.027001857757568 Memory:16432 __$number_of_instances++__ Count:489 Time:0.027001142501831 Memory:0
Inny sposób pomiaru czasu:
// one-dimensional arrays $array = array_fill(0,50000,'tommy is the best!'); $arraykeyexists_result = array(); $start = microtime(true); for ($i = 0; $i < 100000; $i++) { if (array_key_exists($i,$array)) { $arraykeyexists_result[] = 1; } else { $arraykeyexists_result[] = 0; } } $arrtime = round(microtime(true)-$start,3); $start = microtime(true); for ($i = 0; $i < 100000; $i++) { if (isset($array[$i])) { $arraykeyexists_result[] = 1; } else { $arraykeyexists_result[] = 0; } } $istime = round(microtime(true)-$start,3); $totaltime = $arrtime+$istime; $arrpercentage = round(100*$arrtime/$totaltime,3); $ispercentage = round(100*$istime/$totaltime,3); echo "array_key_exists(): $arrtime [$arrpercentage%] secondsn"; echo '<br>'; echo "isset(): $istime [$ispercentage%] secondsn"; echo '<br>';
Otrzymamy pomiar:
array_key_exists(): 0.018 [72%] seconds isset(): 0.007 [28%] seconds