微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

快一点;我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.

我正在使用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 @chim为他聪明的1班轮;在我的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(),上面的数组作为其参数

原文地址:https://www.jb51.cc/php/133755.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐