简单来说,我知道一种解决方案,但如果有更好的解决方案,我想采用更优雅的方法。
我正在使用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',
);
And translate it into:
$array = array(
':foo' => 'some',
':bar' => 'random',
':baz' => 'value',
);
不使用:
$temp = array();
foreach($array as $key => $value){
$temp[':' . $key] = $value;
}
$array = $temp;
我已经浏览了PHP文档,但是找不到适合这个目的的函数(或者一系列函数)。
有任何想法吗?
补充说明:保留接受的答案,但+1 @chim的巧妙方法;解决了我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)
execute()
即使键没有加冒号前缀也能正确工作。 - NullUserException5.2.17
和5.3.8
,并且按预期工作。 - Decent Dabbler5.3.6
,而且它正在运行 :) 抱歉NullUser,你也是正确的。 - Dan Lugg