7

私はすることができる文字列を持っています

$string = "value.";

また

$string = "value1, value2.";

この文字列を繰り返し処理して、-> value(最初の例)および-> value1AND value2(最後のコンマまたはドットなし)の各項目を取得します。

私は考えていました。

  1. 最後にドットを置き換えます。
  2. カンマがあるかどうかを確認します。
  3. カンマがある場合は、「、」を使用して分割分解し、繰り返します。
  4. そうでない場合は、1つのアイテムだけなので、それを使用してください。

これは正しい方法ですか?

私はPHPを初めて使用し、問題を解決するためのベストプラクティスとベスト方法を学ぼうとしています。

ありがとうございました。

4

7 に答える 7

23

あなたは絶対に正しいです、あなたはこのようにそれをすることができます:

$string = 'foo, bar, baz.';
$string = preg_replace('/\.$/', '', $string); //Remove dot at end if exists
$array = explode(', ', $string); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
    echo $value . PHP_EOL; //print value
}
于 2012-05-31T18:34:10.643 に答える
3

私はこれが答えられたことを知っています、しかし、あなたは1つのコマンドでこれをすることができました:

$input = "foo, bar, baz., shibby, poop.";

//-- handles it all in one pass
$output = preg_split('/[\.,\s]/', $input, -1, PREG_SPLIT_NO_EMPTY);

//-- just output
array_walk($output, function(&$item, $idx) {
    echo $idx . ': ' . $item . PHP_EOL;
});

ただし、値にスペースを期待している場合は、これによって値も分割されます。\s要素をトリミングするために正規表現に追加しました。値にスペースが必要な場合は、後で\s正規表現とtrim()要素のを省略してください。

または、この正規表現は同じものを生成します:/(\.\s?|,\s?)/

$input = "foo, bar, baz., shibby, poop. foo bar";

//-- handles it all in one pass
$output = preg_split('/(\.\s?|,\s?)/', $input, -1, PREG_SPLIT_NO_EMPTY);

//-- just output
array_walk($output, function(&$item, $idx) {
    echo $idx . ': ' . $item . PHP_EOL;
});

生産する

0: foo
1: bar
2: baz
3: shibby
4: poop
5: foo bar

正規表現:説明

元の正規表現は、[およびで示されるように、文字列内の1文字で単純に分割され]ます。したがって、/[\.,\s]/文字列内のピリオド、コンマ、およびスペース文字に一致します。それについて考えた後、これはおそらくあなたが望むものではなく、近いものです。

更新された正規表現は少し異なり、2つの異なるシナリオに分かれています。\.\s?言う:期間および/またはpreiod+spaceで分割します。は上記?をオプションにします(私は0または1を信じています)。と同じ,\s?です。カンマおよび/またはカンマ+スペースで一致します。これはすべてのシナリオを説明します。(...)文字範囲の代わりにグループ化()を使用すると、これが可能になります。真ん中のパイプ|はORを意味し、完全な正規表現は次のことを意味します。ピリオドおよび/またはピリオド+スペースORコンマおよび/またはコンマ+スペースで一致します。

于 2012-05-31T18:59:13.273 に答える
2
$string = "value 1, value2";
$string = trim($string, ".");

$split = explode(",", $string);
print_r($split);
于 2012-05-31T18:30:30.280 に答える
2

次のコードを使用します。

$string = "value1, value2.";
$arr = explode(', ', trim($string, '.'));
print_r($arr);

出力

Array
(
    [0] => value1
    [1] => value2
)
于 2012-05-31T18:32:17.467 に答える
1

2と4は実行しないでください。コンマがない場合は、1つの要素の配列に分割されます。

于 2012-05-31T18:29:54.567 に答える
1

このコードを試してください

$arr="a,b,c";
$variableAry=explode(",",$arr); 
foreach($variableAry as $var)
{
 echo"<input type='text' value=".$var." ><br/><br/>";
}
于 2016-07-27T07:53:44.947 に答える
0

爆発し、要求した区切り文字がない場合、インデックス0の結果は文字列全体になります。

<?php
$string = "test, test2., test3, test4";
print_r( explode(',', $string) );
//Array
//(
//    [0] => test
//    [1] =>  test2.
//    [2] =>  test3
//    [3] =>  test4
//)

$string = "test test2. test3 test4";
print_r( explode(',', $string) );
//Array
//(
//    [0] => test test2. test3 test4
//)
于 2012-05-31T18:31:13.360 に答える