<?php
|
|
/**
|
|
* It's hard to believe this isn't a PHP builtin.
|
|
*
|
|
* @param $source array to pull a subset of key/value pairs out of
|
|
* @param $keys list of keys to pull out
|
|
* @return $result array
|
|
*/
|
|
function array_subset_of_the_array_based_on_a_list_of_keys (array $source, array $keys)
|
|
{
|
|
$result = array();
|
|
foreach ($keys as &$key)
|
|
$result[$key] = $source[$key];
|
|
return $result;
|
|
}
|
|
|
|
function faster_version (array $source, array $keys)
|
|
{
|
|
$result = array();
|
|
for ($i = 0, $size = count($keys); $i < $size; ++$i) {
|
|
$key = $keys[$i];
|
|
$result[ $key ] = $source[ $key ];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
$keys = array('one', 'two', 'three', 'four', 'five', 'six');
|
|
|
|
$source = array(
|
|
'one' => 'blakdlajsfdlkajfds;lasjkflaksjf',
|
|
'two' => 'asdfkljasfkjsadfas;jdfas ldfjk',
|
|
'three' => 'alk;sjdfasklfjaslf;ja',
|
|
'four' => '6',
|
|
'five' => 2,
|
|
'six' => 12314
|
|
);
|
|
|
|
$start = microtime(true);
|
|
|
|
for ($i = 0, $size = 100000; $i < $size; ++$i) {
|
|
$pulled = faster_version($source, array('one', 'three', 'five'));
|
|
}
|
|
|
|
$time1 = microtime(true) - $start;
|
|
|
|
$start = microtime(true);
|
|
|
|
for ($i = 0, $size = 100000; $i < $size; ++$i) {
|
|
$pulled = array_subset_of_the_array_based_on_a_list_of_keys($source, array('one', 'three', 'five'));
|
|
}
|
|
|
|
$time2 = microtime(true) - $start;
|
|
|
|
echo "time1: $time1\ntime2: $time2\n";
|