快一点; 我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.
我正在使用PDO进行预先准备的声明:
$sql = "INSERT INTO my_table (foo, bar, baz) VALUES (:foo, :bar, :baz)";
$source->execute($sql, array(
':foo' => $foo,
':bar' => $bar,
':baz' => $baz,
));
Run Code Online (Sandbox Code Playgroud)
这很好,但我想传入一个先前创建的数组,但是包含的键没有冒号(:)的前缀,我认为必须有一个优雅的方式:
$array = array(
'foo' => 'some',
'bar' => 'random',
'baz' => 'value',
);
Run Code Online (Sandbox Code Playgroud)
并将其翻译成:
$array = array(
':foo' => 'some',
':bar' => 'random',
':baz' => 'value',
);
Run Code Online (Sandbox Code Playgroud)
没有做:
$temp = array();
foreach($array as $key => $value){
$temp[':' . $key] = $value;
}
$array = $temp;
Run Code Online (Sandbox Code Playgroud)
我浏览过PHP文档,但是我找不到适合此目的的函数(或序列).
有任何想法吗?
离开接受的答案,但+1 @chim为他聪明的1班轮; 在我的XY问题中解决了X. 重新格式化的解决方案:
$format = ':%s';
$values = array_flip(array_map(function ($key) use($format) {
return sprintf($format, $key);
}, array_flip($values)));
Run Code Online (Sandbox Code Playgroud)
也许包含在一个函数中 array_keys_format(array $array, $format)
$source->execute($sql, array(
'foo' => $foo,
'bar' => $bar,
'baz' => $baz
));
Run Code Online (Sandbox Code Playgroud)
这是假设上面的调用PDOStatement::execute(),以上述array为参数.1
:)
5.2.17和5.3.8此处测试,并按预期工作.
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |