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

前端之家收集整理的这篇文章主要介绍了在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(),上面的数组作为其参数

猜你在找的PHP相关文章