7

我有一个字符串可以是

$string = "value.";

或者

$string = "value1, value2.";

我想遍历这个字符串来获取每个项目,它们是 -> value(在第一个例子中)和 -> value1ANDvalue2在第二个例子中(最后没有逗号或点)。

我在想;

  1. 最后替换点。
  2. 检查是否有逗号。
  3. 如果有逗号,则使用“,”进行拆分分解并迭代。
  4. 如果没有,只有一个项目,所以只需使用它。

这是正确的做法吗?

我是 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

我知道这已经得到解答,但是,你可以用一个命令来做到这一点:

$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

正则表达式:解释

原始的正则表达式只是简单地分割字符串中的单个字符,如[and表示]。因此,/[\.,\s]/匹配字符串中的句点、逗号和空格字符。想了想,这可能不是你想要的,但很接近。

更新后的正则表达式略有不同,分为两种不同的场景。\.\s?说:拆分期间和/或前段+空格。使?前面的可选(我相信 0 或 1)。与,\s?. 匹配逗号和/或逗号+空格。这说明了所有场景。使用分组 ( (...)) 而不是字符范围可以实现这一点。|中间的管道表示 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。如果没有逗号,那么它将拆分为一个元素的数组。

于 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 回答