在PHP中使用字符串(:)前缀数组键

快一点;我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.

我正在使用PDO进行预先准备的声明:

$sql = "INSERT INTO my_table (foo,bar,baz) VALUES (:foo,:bar,:baz)";

$source->execute($sql,array(
    ':foo' => $foo,':bar' => $bar,':baz' => $baz,));

这很好,但我想传入一个先前创建的数组,但是包含的键没有以冒号(:)为前缀,我认为必须有一个优雅的方式:

$array = array(
    'foo' => 'some','bar' => 'random','baz' => 'value',);

并将其翻译成:

$array = array(
    ':foo' => 'some',':bar' => 'random',':baz' => 'value',);

没有做:

$temp = array();
foreach($array as $key => $value){
    $temp[':' . $key] = $value;
}
$array = $temp;

我浏览过PHP文档,但是我找不到适合此目的的函数(或序列).

有任何想法吗?

附录

留下接受的答案,但1 @chim为他聪明的1班轮;在我的XY问题中解决了X.重新格式化的解决方案:

$format = ':%s';
$values = array_flip(array_map(function ($key) use($format) {
    return sprintf($format,$key);
},array_flip($values)));

包含在函数中,也许是array_keys_format(array $array,$format)

$source->execute($sql,array(
    'foo' => $foo,'bar' => $bar,'baz' => $baz
));

这假设上面调用了PDOStatement :: execute(),上面的数组作为其参数

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...