2013-05-09 61 views
1

假設我有一個數組。在PHP中將一個連接前置到一個內爆陣列的最後的方法是什麼?

$shopping_list = array('eggs', 'butter', 'milk', 'cereal'); 

什麼是顯示這是一個逗號分隔的列表,並在前面加上一個詞(連詞,介詞等)的最後一個值的最簡單的和/或最聰明的辦法?期望的結果包括:

'eggs, butter, milk, and cereal' 
'eggs, butter, milk, or cereal' 
'eggs, butter, milk, with cereal' 
'eggs, butter, milk, in cereal' 
// etc. 

該數組將會是可變長度的,可能是關聯的,並且最好不應修改。它也不需要崩潰;我認爲這只是做這種事情的標準方式。數組解引用也很好,但PHP 5.3兼容的東西會很好。

我想沿着

$extra_word = 'and'; 

implode(', ', array_slice($shopping_list, 0, count($shopping_list) - 1)) 
    . ', ' . $extra_word . ' ' 
    . implode(',', array_slice($shopping_list, count($shopping_list) - 1)); 

行的東西,但是這是一個謊言。循環更清潔,並且不太適應:

$i = 0; 
$output = ''; 

foreach ($shopping_list as $item) { 
    $i += 1; 
    if ($i > 1) { 
     $output .= ', '; 
     if ($i === count($shopping_list)) { 
      $output .= $extra_word . ' '; 
     } 
    } 

    $output .= $item; 
} 

這兩種方式看起來都很迂迴。想到更好的方法嗎?

+0

這不是做一個標準的事情,你已經提供了兩種解決方案。這不是一個問題。 – markus 2013-05-09 10:40:23

+0

@markus什麼是'那'?字符串操作?我用PHP做我的雜貨店購物清單。它幫助很多:) – danronmoon 2013-05-09 10:42:14

+0

@Voitcus我只是在數組關聯的情況下使用計數器。 – danronmoon 2013-05-09 10:45:12

回答

6

這也更清潔。

$pop = array_pop($shopping_list); 
echo implode(", ", $shopping_list)." and $pop."; 
+0

啊,我喜歡這個。謝謝。 – danronmoon 2013-05-09 10:42:30

3

一些想法可能是複製數組。

$array = array_values($shopping_list); 
$array[count($array)-1] = $extraword . ' ' . $array[count($array)-1]; 
// implode etc. 

Starx解決方案更好。

+1

我喜歡'The Starx Solution'的聲音:)(+1) – Starx 2013-05-09 10:44:44

+0

現在我想如果數組是聯想的,這可能不起作用。 – Voitcus 2013-05-09 10:47:59

+1

在數組關聯的情況下,可能有助於將'$ array'設置爲'array_values($ shopping_list)'。好決定。 – danronmoon 2013-05-09 10:48:19

0

另一種解決方案:

$last = count($shopping_list)-1 ; 
$shopping_list[$last] = "in {$shopping_list[$last]} ; 
相關問題