2011-03-27 106 views
1

我想從數組中產生一個像這樣的字符串。如何在每個陣列前添加一個字符串

omc_playroom.id,omc_playroom.name,omc_playroom.parentid, 
omc_playroom.status,omc_playroom.table_id,omc_playroom.lang_id 

我試過這個,但它只爲第一個添加了omc_playroom。

$fields = array('id, name,parentid,status,table_id,lang_id'); 
$module ='playroom'; 
$playrooms = getAll($fields,$module); 
echo $playrooms; 

function getAll($fields,$module){ 
    $string=''; 
$module_table = 'omc_'.$module; 
    foreach ($fields as $field){ 
     $string .= ",$module_table.$field"; 
    } 
    $string =substr($string,1); // remove leading "," 
return $string; 
} 

這就產生,

omc_playroom.id,name,parentid, status, table_id, lang_id 

我怎麼能在每個項目前加上omc_playroom?

在此先感謝。

回答

1

試試這個,因爲你當前只有一個元素的數組。

$fields = array('id', 'name', 'parentid', 'status', 'table_id', 'lang_id'); 
2

嗯,首先,你真的沒有項目的數組:你的項目是在一個字符串,它是你的$fields數組的唯一元素。

讓我們提取項目,並刪除在','分離後有時存在的空間:

$fields = array('id, name,parentid,status,table_id,lang_id'); 
$str = $fields[0]; 
$str = str_replace(' ', '', $str); 

現在,我們分開$str串,使用','作爲分隔符:

$items = explode(',', $str); 

並在結果數組上循環,爲每個元素添加前綴:

foreach ($items as & $item) { 
    $item = 'omc_' . $item; 
} 

最後,我們可以爆這些元素一起回來,和回聲結果:

$new_str = implode(',', $items); 
echo $new_str; 

而我們得到:

omc_id,omc_name,omc_parentid,omc_status,omc_table_id,omc_lang_id 

這似乎是你所期望的。



但是,淡然的,如果你的$fields變量確實含有一個真正合適的陣列:

$fields = array('id', 'name', 'parentid', 'status', 'table_id', 'lang_id'); 

事情就會容易得多:你只需要遍歷該陣列:

$fields = array('id', 'name', 'parentid', 'status', 'table_id', 'lang_id'); 
foreach ($fields as & $field) { 
    $field = 'omc_' . $field; 
} 
var_dump($fields); 

而且你會得到:

array 
    0 => string 'omc_id' (length=6) 
    1 => string 'omc_name' (length=8) 
    2 => string 'omc_parentid' (length=12) 
    3 => string 'omc_status' (length=10) 
    4 => string 'omc_table_id' (length=12) 
    5 => &string 'omc_lang_id' (length=11) 
+0

+1 L'ART倒L'ART工作:) – vbence 2011-03-27 10:50:43

+0

感謝細節。 – shin 2011-03-27 10:55:45

+0

另請注意,可能沒有經驗的開發人員可能會遇到與處理循環後最後一項的'$ field'變量有關的問題。 – zerkms 2011-03-27 10:58:09

0

既然你有一個「變量分隔符」,preg_replace()可以在短短的一個步驟做到這一點。

代碼:(Demo

$fields=['id, name,parentid,status,table_id,lang_id']; 
$module='playroom'; 
$module_table='omc_'.$module; 

echo preg_replace('/^|,\K ?/',"$module_table.",$fields[0]); 
// start of string-^ 
//    OR---^ 
//     ^^^^^-match comma, restart match, then match optional space 

輸出:

omc_playroom.id,omc_playroom.name,omc_playroom.parentid,omc_playroom.status,omc_playroom.table_id,omc_playroom.lang_id 
相關問題