2012-09-30 44 views
2

我想用数组构建一个sql查询并添加一个前缀。带有前缀和逗号分隔的PHP implode数组

如:

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

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

输出:

SELECT文件名,media_image从媒体WHERE media_id = '3'

我真正想要的:

选择media_column1,我dia_column2 FROM媒体WHERE media_id = '3'

问题:如何可以I: 1.前缀与 “media_” 2.用逗号分隔多于1个项目的阵列的所有项目吗?

回答

10

为什么不把 “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}'"; 
+3

前者是废话,后者不错 – Alexander

+0

@亚历山大,为什么前胡扯? – Starx

+1

因为implode();需要2个参数,后缀(排序)和数组。 如果将数组连接到一个字符串,PHP将自动将该数组转换为一个字符串,并且implode将尝试并爆裂一个字符串。 T_T –

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}'"; 
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"; 

挑哪一个最适合你。