2011-12-29 71 views
1

我有一個項目數組:如何寫一個字符串數組到一個單一的,格式化字符串

array(
    'apples', 
    'oranges', 
    'pineapples' 
) 

,我想,像這樣的格式:「我最喜歡的水果中都​​,orangespineapples

因此,使用PHP我希望能夠將該陣列轉換爲友好的閱讀器apples, oranges and pineapples

起初我還以爲我也許可以使用array_map但我不知道我怎麼會去告訴了上次和2日至最後一項是(很容易與array_map每個項目後添加一個,,但是你不想在最後一個項目前留下一個逗號)

想法?

回答

4

分解問題以征服它:取出最後一個元素,創建逗號分隔列表,然後添加最後一個元素。

$array = array(
    'apples', 
    'oranges', 
    'pineapples' 
); 

$last = array_pop($array); 
echo implode(', ', $array), ' and ', $last; # apples, oranges and pineapples 

自然,這隻有在數組中至少有兩個值時纔有意義。使用的功能:implodeDocs(在這種情況下可能比array_map更合適)和array_popDocs


在另一方面,如果該值不包含任何,你可以先創建一個逗號分隔字符串的implode函數,然後使用正則表達式與and替換最後一個逗號。

這樣做也適用於少於2個元素的數組。我這樣做是在一個循環中,可以消除在每一步數組中的一個元素,使其顯示它的行爲方式:

$array = array(
    'apples', 
    'oranges', 
    'pineapples' 
); 

foreach($array as $v) 
{ 
    echo preg_replace('(,([^,]*)$)', ' and$1', implode(', ', $array)), "\n"; 
    array_pop($array); 
} 

輸出:

apples, oranges and pineapples 
apples and oranges 
apples 
0

也許你找implode,這等於是將數組字符串

1

你可以知道哪一個是通過計算他們的最後一個元素:

$array = array(
    'apples', 
    'oranges', 
    'pineapples' 
); 

$count= count($array); 
// because the key start from 0 , we must subtract 1 
$lastKey= $count-1; 


/// now u can do that 
echo "<br>1st :".$array[0]; 
echo "<br>2nd :".$array[1]; 
echo "<br>3rd :".$array[2]; 
echo "<br>last:".$array[$lastKey]; 

// or same as u like 

foreach($array as $key=>$value){ 
    echo $value; 
    if($key == $lastKey){ 
     echo "."; 
    }elseif($key == ($lastKey-1)){ 
     echo " and "; 
    }else{ 
     echo " , "; 
    } 
} 
2

好的,所以其他人已評論implode是一個解決方案。

我可能會最終使用的implodestrripossubstr_replace組合:

$string = implode(', ', $fruit); 
$pos = strripos($string, ', '); 
echo substr_replace($string, ' and ', $pos, 2); 

導致apples, oranges and pineapples

我很樂意發佈一個更優雅的解決方案,如果我能想到一個,但這是一個快速簡便的方法來獲得您需要的更改。

+0

我承認使用「array_pop」發佈的@hakre是一種更乾淨的方式! – 2011-12-29 02:43:17

相關問題