php在图片前加前缀,PHP 怎么样将 Array 的 key 统一加上前缀 ?

array_map array_walk array_filter 等都可以实现这样的操作。

出发点就是,每个函数有没有自带对数组的遍历。

array_map 有个缺点是需要单独取一次 key,这样增加了代码的复杂度。

建议可以使用 array_walk,然后利用闭包的特性。

array_walk 实现代码如下:

$array = [

"version" => "1.1",

"connection" => "close",

];

$new_arr = array();

array_walk($array, function ($value, $key) use (&$new_arr) {

$new_arr['http_' . $key] = $value;

});

var_dump($new_array);

注意!!!

类似题中的处理,这些方法都有一个特别大的缺点,时间复杂度比 foreach 高。

对 foreach array_walk array_map 进行基准测试,来说明时间复杂度的差别。

结果如下:

cc9a68068264552ed8b8b1b5c148d615.png

我们发现差别几乎是 2 倍 的。所以要考虑一下为什么不用 foreach。

基准测试代码如下:

error_reporting(E_ALL | E_STRICT);

define('ITERATIONS', 2000000);

class Bench

{

private $bench_name;

private $start_time;

private $end_time;

public function start($name)

{

$this->bench_name = $name;

$this->start_time = microtime(true);

}

public function end()

{

$this->end_time = microtime(true);

echo "Call style: " . $this->bench_name . '; ' . ($this->end_time - $this->start_time) . " seconds". PHP_EOL;

}

}

function use_foreach($array)

{

$arrayPrefix = [];

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

$arrayPrefix['http_' . $key] = $value;

}

$array = $arrayPrefix;

}

function use_array_map($array)

{

array_combine(array_map(function($v){return "http_".$v;},array_keys($array)),array_values($array));

}

function use_array_walk($array)

{

$new_arr = array();

array_walk($array, function ($value, $key) use (&$new_arr) {

$new_arr['http_' . $key] = $value;

});

}

$bench = new Bench();

$array = [

"version" => "1.1",

"connection" => "close",

"version2" => "1.1",

"connection2" => "close",

"version3" => "1.1",

"connection3" => "close",

];

$bench->start('use_foreach');

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

use_foreach($array);

}

$bench->end();

$bench->start('use_array_walk');

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

use_array_walk($array);

}

$bench->end();

$bench->start('use_array_map');

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

use_array_map($array);

}

$bench->end();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值