2011-12-08 28 views
8

我想換的東西,如一個數組的所有元素,但我不希望很多線路或foreach循環數組元素包裝的所有元素

$links = array('london','new york','paris'); 

// the outcome should be 

<a href="#london">london</a> 
<a href="#new york">new york</a> 
<a href="#paris">paris</a> 
+1

因此,已經排除了規範和合理的辦法,還有什麼你試試? –

+0

以及我對foreach循環的confortable我只是想看看是否有可能。 – Val

+0

爲什麼沒有'foreach'循環?哦,你剛剛回答,因爲我張貼! – Ryan

回答

23

如何array_map

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map(
    function ($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
    }, 
    $links 
); 

Demo(點擊源)

沒有PHP> 5.3,則不能使用lambda功能,所以你需要的東西是這樣的:

function wrap_those_links($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
} 

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map('wrap_those_links', $links); 

Demo for PHP 5.2(同樣,點擊來源)

+0

解析錯誤:語法錯誤,意外的T_FUNCTION,期望')'在...上的第183行給出了一個錯誤,但這是很酷的:) – Val

+0

你不能運行PHP 5.3.0 :) - 這是一個簡單的修復,一個秒我會更新我的回答 – nickb

+2

或'create_function' –

7

嘗試join('\n', array_map(function($a) { return "<a href=\"#$a\",>$a<\\a>";}, $links));

+2

...或者因爲不是使用命名函數「implode」,而是使用別名「join」,並且沒有以易讀的方式格式化答案,或者提供了有關建議限制的解釋(PHP 5> = 5.3)。當涉及到自我文檔時,Implode更隱含。 – SEoF

+0

我認爲這個答案並不完全正確,使用單引號而不是雙引號,反斜槓代替正斜槓,它應該是:'join(「\ n」,array_map(function($ a){return「$a」 ;},$ links));' – superUntitled

0

有一個在線的解決方案:

trim(json_encode(array_values($array)) , '[]'); 

輸出如下:

"one","two","three" 
相關問題