Быстрый; Я знаю решение, но ищу что-то более элегантное, если оно существует.
Я использую 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)