Quick one; I know a solution, but I'm looking for something more elegant if it exists.
I'm using PDO for prepeared statements:
$sql = "INSERT INTO my_table (foo, bar, baz) VALUES (:foo, :bar, :baz)";
$source->execute($sql, array(
':foo' => $foo,
':bar' => $bar,
':baz' => $baz,
));
This is fine, but I want to pass in a previously created array, however the keys contained aren't prefixed by the colon (:
), and I figure there must be an elegant way to take:
$array = array(
'foo' => 'some',
'bar' => 'random',
'baz' => 'value',
);
And translate it into:
$array = array(
':foo' => 'some',
':bar' => 'random',
':baz' => 'value',
);
Without doing:
$temp = array();
foreach($array as $key => $value){
$temp[':' . $key] = $value;
}
$array = $temp;
I've browsed the PHP docs, but I can't find a function (or sequence of) that suits the purpose.
Any ideas?
Addendum
Leaving the accepted answer, but +1 @chim for his clever 1-liner; solves the X in my XY problem. Reformatted solution:
$format = ':%s';
$values = array_flip(array_map(function ($key) use($format) {
return sprintf($format, $key);
}, array_flip($values)));
Wrapped in a function, perhaps array_keys_format(array $array, $format)