快一点;我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.
我正在使用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)