Benchmark: array_search vs array_find

Run Settings
LanguagePHP
Language Version
Run Command
<?php function array_find($key, $needle, $haystack) { return array_column($haystack, null, $key)[$needle]; } function array_find_search($key, $needle, $haystack) { $key = array_search($needle, array_column($haystack, $key, null)); return $haystack[$key]; } function array_find_filter($key, $needle, $haystack) { $value = array_filter($haystack, function($field) use ($key, $needle) { return $field->$key === $needle; }); return reset($value); } function runTests($debug = false) { return [ 'array_filter' => test_array_filter($debug), 'array_search' => test_array_search($debug), 'array_find' => test_array_find($debug), ]; } function test_array_filter($debug) { $fields = array_map(function($val) { return (object) ['nid' => "field_$val", 'position' => $val]; }, range(1, 5000)); $start_time = microtime(TRUE); $value = array_find_filter('nid', 'field_3000', $fields); $end_time = microtime(TRUE); if ($debug) { echo __FUNCTION__ . ": "; print_r($value); } return $end_time - $start_time; } function test_array_search($debug) { $fields = array_map(function($val) { return (object) ['nid' => "field_$val", 'position' => $val]; }, range(1, 5000)); $start_time = microtime(TRUE); $value = array_find_search('nid', 'field_3000', $fields); $end_time = microtime(TRUE); if ($debug) { echo __FUNCTION__ . ": "; print_r($value); } return $end_time - $start_time; } function test_array_find($debug) { $fields = array_map(function($val) { return (object) ['nid' => "field_$val", 'position' => $val]; }, range(1, 5000)); $start_time = microtime(TRUE); $value = array_find('nid', 'field_3000', $fields); $end_time = microtime(TRUE); if ($debug) { echo __FUNCTION__ . ": "; print_r($value); } return $end_time - $start_time; } $results = []; for ($i = 1; $i <= 1000; $i++) { $results[] = runTests(); } $benchResult = [ 'array_find' => array_sum(array_column($results, 'array_find')), 'array_filter' => array_sum(array_column($results, 'array_filter')), 'array_search' => array_sum(array_column($results, 'array_search')), ]; asort($benchResult); print_r($benchResult); echo "==============================================\n"; runTests(true);
Editor Settings
Theme
Key bindings
Full width
Lines