2016-05-11 13 views
0

$atitがその文字列の配列で、結果が "R. & B. & T"のようなものでなければならない場合、このコードを使用して文字列の最初の文字を表示します。しかし、このコードは、 "R. & B. & T. &"のような結果を表示します。配列の末尾から文字を削除する

最後の「&」を取り除くことはできますか?私はをecho行に入れようとしましたが、最後のものだけを削除する必要がある間にすべて "&"を削除しました。

foreach ($atit as $ati) { 
    $pieces = explode(' ', $ati); 
    $otw = preg_replace('/\W\w+\s*(\W*)$/', '$1', $pieces); 
    $acronym = ""; 

    foreach ($otw as $w) { 
     $acronym .= $w[0].'. '; 
    } 

    $bla = $acronym.' & '; 

    echo $bla; 
} 

私はそれはforeachに問題だと思うが、私はそれを把握することができませんでした。何か提案してください?

更新:上記のコードは、各エントリの最後のものを除いてすべての単語の最初の文字を表示するように設計されているよう

アレイ内の各エントリは、いくつかの単語で構成されています。

例:

$atit = ["Right now", "Behind you", "This is the time"]; 

したがって、上記のコードでは、最初の各配列のエントリの最後の単語を削除してから、その中に残りの単語の最初の文字を取得し、表示されます、このような何か(R. & B 。& TI T)。問題は最後に追加の「&」が追加されていることです(R. & B. & T. I. T &)。

+3

$ BLA [] = $の頭字語を、ループエコーインパクト( '&'、$ bla)の後 – splash58

+0

配列のサンプルを投稿できますか? –

+0

あなたは 'R. &B.&T.'が入りますか?そして/またはあなたの 'rtrim'使用法は、それを行うことができるはずです。 – chris85

答えて

1

あなたは文字列の配列から、各文字列の最初の文字を含んで成る「頭字語」の形成を意味している場合 - ここではarray_maparray_sliceimplodeexplodeucfirst機能を使用して複雑なソリューションです:

$atit = ["Right now", "Behind you", "This is the time"]; 

$acronym = implode(" & ", array_map(function($v) { 
    $words = explode(" ", $v); 
    if (count($words) > 2) { 
     return implode(".", array_map(function($w) { 
        return ucfirst($w[0]); 
       }, array_slice($words, 0, -1))); 
    } 
    return $words[0][0] . "."; // for simple strings (less/equal two words) 
}, $atit)); 

echo $acronym; // "R. & B. & T.I.T" 
+0

ありがとうございます。なぜあなたは質問の更新を見ることができます。あなたの応答を待っています – nisr

+0

@nisr、問題はありません、私の更新を参照してください – RomanPerekhrest

1

このような区切り文字で複数の要素を連結すると、毎回結果変数をチェックすることを好みます。空でない場合は、連結区切り文字の前に追加します。空の場合、私はしません。そうすれば、最後に不必要な区切り文字で終わることはありません。

(それとも要素の配列を作成し、PHPの破()関数を使用)

例は:

$array = array("a", "b", "c", "d"); 
$result = ""; 
foreach ($array as $a) 
{ 
    if ($result != "") { $result .= " & "; } 
    $result .= $a; 
} 
// $result = "a & b & c & d" 
1

あなたはその正規表現を必要とすると、なぜあなたがなぜ私は理解していませんループの繰り返しごとに別々の文字列を印刷します。

私は、このソリューションを提案することができます

$atit = ["Right now", "Behind you", "This is the time"]; 

$partList = array(); 
foreach ($atit as $ati) { 
    $pieces = explode(' ', $ati); 
    $numberOfPieces = sizeof($pieces); 
    if ($numberOfPieces > 1) { 
     $pieces = array_slice($pieces, 0, $numberOfPieces-1); 
    } 

    $acronym = ""; 
    foreach ($pieces as $w) { 
     $acronym .= strtoupper($w[0]).'. '; 
    } 

    $partList[] = $acronym; 
} 

$bla = implode('& ', $partList); 
echo $bla; 
関連する問題