3v4l.org

run code in 300+ PHP versions simultaneously
<?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; }); } function uniqueForeach($array){ $results = array(); foreach($array as $key => $thing){ $uniqueThing = true; foreach($results as $result){ if($result->getField() == $thing->getField()){ $uniqueThing = false; break; } } if($uniqueThing){ $result[] = $thing; } } return $result; } function uniqueArrayMap($array){ return array_intersect_key($array, array_unique(array_map(function (&$thing) { return $thing->getField(); }, $array))); } $needle = 50; $start = microtime(true); $result = searchForeach($aBunchOfThings, $needle); $durationForeach = microtime(true) - $start; $start = microtime(true); $result = searchArrayFilter($aBunchOfThings, $needle); $durationArrayFilter = microtime(true) - $start; $start = microtime(true); $result = uniqueForeach($aBunchOfThings); $durationUniqueForeach = microtime(true) - $start; $start = microtime(true); $result = uniqueArrayMap($aBunchOfThings); $durationUniqueArrayMap = microtime(true) - $start; echo "Function | Time\n"; echo "-----------------------------------------\n"; echo "searchForeach | $durationForeach\n"; echo "searchArrayFilter | $durationArrayFilter\n"; echo "uniqueForeach | $durationUniqueForeach\n"; echo "uniqueArrayMap | $durationUniqueArrayMap\n"; ?>

preferences:
31.53 ms | 402 KiB | 5 Q