当前位置: 首页 > 面试题库 >

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

郭洋
2023-03-14
问题内容

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

输入项

$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



 类似资料:
  • 问题内容: 我有一个PHP数字数组,我想在前面加上减号(-)。我认为通过使用爆炸和内爆是可能的,但是我对php的了解实际上是不可能的。任何帮助,将不胜感激。 本质上,我想从这里开始: 对此: 有任何想法吗? 问题答案: 简单: 除非数组是字符串:

  • 我需要最简单的方法将项目添加到Java数组的前面。 我需要Java数组而不是ArrayList。

  • 在这里您可以输入新建快捷方式的参数,它将被自解压程序在解压后创建。这个对话框包含下列区域: 创建到哪里 选择您希望创建快捷方式的位置。 源文件名 被压缩的文件名。 目标文件夹 创建快捷方式的文件夹,如果它不存在,它将被自解压文件创建。 快捷方式描述 描述快捷方式的文本。 快捷方式名 是由自解压程序创建的 .lnk (快捷方式)文件的文件名。 快捷方式图标 快捷方式关联的图标文件名称。如果保留空白,

  • 问题内容: 是否可以在向其添加一些参数数据的同时将请求转发给另一个控制器?我尝试添加到ModelMap中,但是它似乎不存在问题。我正在做类似的事情: 我能想到的唯一其他方法是将参数放在会话上,然后将其弹出目标控制器。 问题答案: 最简单的方法是将数据添加到请求中。 由于这是转发,因此将相同的请求传递到服务器内的不同处理程序。 作为示例,让我们从两个控制器的简单设置开始,一个转发到另一个: 添加数据

  • 本文向大家介绍mybatis-plus 表名添加前缀的实现方法,包括了mybatis-plus 表名添加前缀的实现方法的使用技巧和注意事项,需要的朋友参考一下 1、使用mybatis-plus自身的查询构造去,只需要在全局配置中添加如下配置 2、自定义sql语句中添加表名前缀 在yml文件中添加如下配置 然后在自定义sql语句如下 编译后的sql语句 MybatisPlus 数据库字段使用驼峰命名

  • 我需要一种最简单的方法将一个项添加到Java数组的前面。 我需要Java数组,而不是ArrayList。