2013-02-21 20 views
0

我在foreach循環中有點混淆。foreach構造

有一個在我下面的代碼foreach

foreach ($myrows as $rows){ 
    $option = $rows->option_value; 
    $option_value = recursive_unserialize_replace($site_url,$_POST['url_name'],$option); 
    $sql.= '('."'".$rows->option_name."'".','."'".$option_value."'".','."'".$rows->autoload."'".')'.","; 
} 

看看行號3,還有就是我用來打印逗號。現在我不想在最後一行輸出逗號。

+5

所以刪除該公司的逗號德? – sevenseacat 2013-02-21 11:56:06

+0

我想你沒有得到我的問題?先生,我想把逗號放在我輸出的每一行中。只有我不想在我的輸出的最後一行。 – Ranjit 2013-02-21 11:57:01

回答

9

試試這個:

$array = array(); 

foreach ($myrows as $rows){ 
    $option = $rows->option_value; 
    $option_value = recursive_unserialize_replace($site_url,$_POST['url_name'],$option); 
    $array[] = '('."'".$rows->option_name."'".','."'".$option_value."'".','."'".$rows->autoload."'".')'; 
} 

$sql = join(', ', $array); 
+1

'+ 1'即使這是一個很好的技巧。 – 2013-02-21 11:59:48

0

只是這樣做結尾:

$sql = substr($sql, 0, strlen($sql)-1); 

這將不打印最後一個逗號。

+0

我在哪裏添加foreach循環或什麼? – Ranjit 2013-02-21 12:02:14

+0

你需要在'foreach'之後加上這個。 – 2013-02-21 12:26:33

1

循環後,可以刪除使用trim()功能尾隨逗號:如果你想

$sql = trim($sql, ','); 
+0

是隻刪除最後一個逗號,對不起,我只想要最後一個逗號 – Ranjit 2013-02-21 12:03:19

+0

是的,只有當它們出現在字符串的開頭或結尾時,纔會刪除所有逗號。 – madfriend 2013-02-21 12:08:51

+1

它將刪除任何*前導*和*尾部*逗號。這可能不止一個,但在你的情況下,你的字符串以括號開始,以括號和逗號結尾,所以只有最後的逗號會被刪除。 – SDC 2013-02-21 12:09:20

0

多一個少的操作和更好地利用內存和性能你也可以檢查foreach的指針在哪裏:

foreach ($myrows as $rows){ 
    $option = $rows->option_value; 
    $option_value = recursive_unserialize_replace($site_url,$_POST['url_name'],$option); 
    if ($rows === end($myrows)){ 
     $sql.= "('{$rows->option_name}','{$option_value}','{$rows->autoload}')"; 
    }else{ 
     $sql.= "('{$rows->option_name}','{$option_value}','{$rows->autoload}'),"; 
    } 
}