php - 用字符串 ( :) in PHP

标签 php arrays key

快点;我知道一个解决方案,但我正在寻找更优雅的解决方案(如果存在的话)。

我将 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.175.3.8 进行测试,并按预期工作。

关于php - 用字符串 ( :) in PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619053/

相关文章:

php - SQL 函数不返回结果

php - 通过 php 页面中的 url 从 javascript 发送数组但是

C 数组可以在元素之间包含填充吗?

emacs - 在 Emacs 中,如何将 Ctrl-Key 设置为 Vim 的 LowerCaseKey,以及如何将 Alt-Key 设置为 Vim 的 HigherCaseKey?

java - 将 Double 转换为 Key(优先级队列)

php - 如何在 php 中使用密码保护 zip?

javascript - 为什么 ajax 请求会多次触发

arrays - 计算动态数组的时间复杂度

javascript - 获取匹配元素的索引

javascript - 将js对象键名称中的点替换为下划线