Notatki PHP

prywatne zapiski na kamieniu

 
<?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