快点;我知道一个解决方案,但我正在寻找更优雅的解决方案(如果存在的话)。
我将 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-liner +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)
最佳答案
$source->execute($sql, array(
'foo' => $foo,
'bar' => $bar,
'baz' => $baz
));
这是假设上面的调用 PDOStatement::execute()
在幕后,上面的 array
作为它的参数。1/p>
:)
1) 在此处使用版本
5.2.17
和 5.3.8
进行测试,并按预期工作。
关于php - 用字符串 ( :) in PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619053/