- microtime: documentation ( source)
- array_filter: documentation ( source)
- define: documentation ( source)
- rand: documentation ( source)
<?php
define('NUMBER_OF_THINGS', 100000);
class Something{
const SOME_MAX_VALUE = 100;
protected $field;
public function setField($value){
$this->field = $value;
return $this;
}
public function getField(){
return $this->field;
}
}
$aBunchOfThings = array();
for($i=0; $i<NUMBER_OF_THINGS; $i++){
$aThing = new Something();
$aBunchOfThings[] = $aThing->setField(rand(1, Something::SOME_MAX_VALUE));
}
function searchForeach($array, $needle){
$results = array();
foreach($array as $key => $thing){
if($thing->getField() == $needle){
$result[] = $needle;
}
}
return $result;
}
function searchArrayFilter($array, $needle){
return array_filter($array, function($thing) use ($needle){
return $thing->getField() == $needle;
});
}
$needle = 50;
$start = microtime(true);
$result = searchForeach($aBunchOfThings, $needle);
$durationForeach = microtime(true) - $start;
$start = microtime(true);
$result = searchArrayFilter($aBunchOfThings, $needle);
$durationArrayFilter = microtime(true) - $start;
echo "Function | Time\n";
echo "-----------------------------------------\n";
echo "searchForeach | $durationForeach\n";
echo "searchArrayFilter | $durationArrayFilter\n";
?>