4

我正在尝试使用数组构建 sql 查询并添加前缀。

例如:

$columns = array('column1', 'column2');

"SELECT ". ltrim(implode(", media_", $columns), ', ') . " FROM media WHERE media_id = '{$id}'";

输出:

选择文件名,media_image FROM media WHERE media_id = '3'

我真正想要的:

选择 media_column1、media_column2 从媒体 WHERE media_id = '3'

问题:我怎样才能: 1. 以“media_”为数组的所有项目添加前缀 2. 用逗号分隔多个项目?

4

3 回答 3

12

为什么不把“media_”放在前面?:

$columns = array('column1', 'column2');
$selectColumns = 'media_' . implode(', media_', $columns);

"SELECT {$selectColumns} FROM media WHERE media_id = '{$id}'";

你也可以使用array_map:

$columns = array_map(function($column) {
    return 'media_' . $column;
}, $columns);

"SELECT " . implode(',', $columns) . " FROM media WHERE media_id = '{$id}'";
于 2012-09-30T13:31:40.840 回答
0

[编辑]
另一种方式

$fields = array_reduce($columns, function ($result, $element) {
  $result = is_null($result) ? 'media_'.$element : $result.', media_'.$element;
  return $result;
});

"SELECT {$fields} FROM media WHERE media_id = '{$id}'";
于 2012-09-30T13:30:53.377 回答
0

还有一种方式:

<?php

$id = 1;
$columns = array('column1', 'column2');
array_walk($columns,'add_prefix','media_');

function add_prefix(&$item, $key, $prefix) {
    $item = $prefix . $item;
}


$sql = "SELECT `" . implode('`,`', $columns) . "` FROM media WHERE media_id = '{$id}'";
echo "SQL:" . $sql . "\r\n";

选择最适合您的。

于 2012-09-30T14:51:24.283 回答