在PHP中使用字符串(:)前缀数组键

Dan*_*ugg 6 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,
));
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)

Dec*_*ler 8

$source->execute($sql, array(
    'foo' => $foo,
    'bar' => $bar,
    'baz' => $baz
));
Run Code Online (Sandbox Code Playgroud)

这是假设上面的调用PDOStatement::execute(),以上述array为参数.1

:)


1)在版本5.2.175.3.8此处测试,并按预期工作.