2011-01-28 11 views

答えて

0

このような操作のためにループを回避する必要があります。これらのループは、不要なレベルの複雑さをコードに追加します。

// put the last element of $data to $lastName, and remove the last element from $data 
$lastName = array_pop($names); 
echo join(',',$names) . ' and ' . $lastName; 

は次のようにも多くの1つのラインのバリエーションがあります。

// replace the last ",name" with " and name" 
echo preg_replace('/(,)[a-z]+$/', ' and ', join(',', $names)); 

しかし、彼らは経験の浅いPHP開発者に非常に明確ではありません。

編集あなたが既にあなたの例で持っている配列を捨てて喜んでいるなら、これを行うことができます。

$str = "mathews,neil,ambrose,glen,ethan"; 
$names = array_slice(explode(',', $str), 0, 3); 
$lastName = array_pop($names); 
echo join(',', $names) . ' and ' . $lastName; 
+0

私は同意しますが、ここでは最初の3つの名前が必要です。追加して二番目の名前の後に..私はループなしでこれを行う方法? – leon

+0

ループを保っていれば、そこには3つの名前があります。次に、結果の$ names配列に上記の例のいずれかを使用します。 – xzyfer

+0

あなたがすでに提供しているコードを捨ててもよければ、私の最後の例ができます。 – xzyfer

2

あなたはすでにあなたはできる、カウンター$iを使用しているので、次のチェックを実行してください:

if ($i === count($data) - 2) { 
    echo ' and '; 
} 

...または何でも。それはechoである必要はありません。これが何をするか

+0

なぜ-2?それは1でなければなりません?? – leon

+1

@leon私は 'count'は最後から1つだと思います。' -1'は最後のもので、 '-2'は最後から2番目です。私の偽のPHPループでは、 'と'を最後から2番目の後に追加していました。 – sdleihssirhc

+0

しかし、これを上記のループにどのように追加しますか? – leon

2
$data = explode(",", $str); 
for ($i = 0; $i<count($data)-1; $i++) { 
    $sentence = $sentence.$data[$i].", "; 
} 
$sentence = $sentence."and ".end($data)."."; 
echo $sentence; 

はコンマで変数の最後の1を除いた名前の店すべてで、そして最後に、それ以前との最後の1を追加します「と」。

その変数 - $ sentence - がエコー表示(表示)されます。

EDIT: 最初の3つの結果を表示するには単純です。

$data = explode(",", $str); 
echo $data[0].", ".$data[1].", and ".$data[2]; 

$ data [x]は、名前の1つを返すだけで、順番に格納されます。

+0

'$ data'を爆発させて最後のものを編集してから、" and "を付けてから"、 "で結合できませんでしたか? – sdleihssirhc

+0

私はインパクトを意味しますか? – sdleihssirhc

+0

私は彼が上に持っていたコードを基礎として使いたいと思っていました。しかし、ええ、それはそれを行うための素晴らしい方法になります。 – Gus

関連する問題