Префикс ключей массива строкой (:) в 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-строчный; решает X в моей проблеме XY. Переформатированное решение:

$format = ':%s';
$values = array_flip(array_map(function ($key) use($format) {
    return sprintf($format, $key);
}, array_flip($values)));

Обернутое в функцию, возможно, array_keys_format (array $ array, $ format)

6
задан Dan Lugg 9 April 2013 в 16:05
поделиться