2012-09-30 46 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"; 

挑哪一個最適合你。