向数组键添加前缀的最快方法?

将字符串前缀添加到数组键的最快方法是什么?

输入项

$array = array(

'1' => 'val1',

'2' => 'val2',

);

所需的输出:

$array = array(

'prefix1' => 'val1',

'prefix2' => 'val2',

);

回答:

我发现PHPBench对于非简单的基准测试不是一个很好的来源。因此,除非您真正对运行感兴趣,否则for(....);不会正确显示哪种语法会更快。我汇总了一个简单的基准,以表明当您在迭代过程中同时使用键和值时,foreach实际上是最快的。

实际迫使PHP从循环迭代中读取值非常重要,否则它将尽最大努力优化它们。在下面的示例中,我使用该doNothing函数强制PHP每次都计算键和值。使用doNothing会导致每个循环都产生开销,但由于调用次数相同,因此每个循环的开销都相同。

foreach排在首位的我并不感到惊讶,因为它是用于迭代字典的语言结构。

$array = range( 0, 1000000 );

function doNothing( $value, $key ) {;}

$t1_start = microtime(true);

foreach( $array as $key => $value ) {

doNothing( $value, $key );

}

$t1_end = microtime(true);

$t2_start = microtime(true);

$array_size = count( $array );

for( $key = 0; $key < $array_size; $key++ ) {

doNothing( $array[$key], $key );

}

$t2_end = microtime(true);

//suggestion from PHPBench as the "fastest" way to iterate an array

$t3_start = microtime(true);

$key = array_keys($array);

$size = sizeOf($key);

for( $i=0; $i < $size; $i++ ) {

doNothing( $key[$i], $array[$key[$i]] );

}

$t3_end = microtime(true);

$t4_start = microtime(true);

array_walk( $array, "doNothing" );

$t4_end = microtime(true);

print

"Test 1 ".($t1_end - $t1_start)."\n". //Test 1 0.342370986938

"Test 2 ".($t2_end - $t2_start)."\n". //Test 2 0.369848966599

"Test 3 ".($t3_end - $t3_start)."\n". //Test 3 0.78616809845

"Test 4 ".($t4_end - $t4_start)."\n"; //Test 4 0.542922019958

编辑:我在64位Mac OSX 10.6上使用PHP 5.3

以上是 向数组键添加前缀的最快方法? 的全部内容, 来源链接: utcz.com/qa/413824.html

回到顶部