PHP 遍历一个简单的逗号分隔列表


PHP iterating through a simple comma separated list

>我有一个字符串,可以是

$string = "value.";

$string = "value1, value2.";

我想遍历这个字符串,获取第二个示例中的 -> value(在第一个示例中)和 -> value1 AND value2的每个项目(最后没有逗号或点)。

我在想;

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

这是正确的做法吗?

我是PHP的新手,并试图学习最佳实践和解决问题的最佳方法。

谢谢。

你是绝对正确的,你可以这样做:

$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
}
我知道

这已经得到了回答,但是,您可以使用一个命令执行此操作:

$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

正则表达式:解释

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

更新后的正则表达式略有不同,分为两种不同的场景。 '.'s? 说:在周期和/或前 +空间上分裂。?使前面的可选(我相信 0 或 1)。与,'s?相同.匹配逗号和/或逗号+空格。这说明了所有方案。使用分组((...))代替字符范围可以做到这一点。中间的管道|表示 OR SO,完整的正则表达式表示:匹配句点和/或句点+空格或逗号和/或逗号+空格。

我会使用以下代码:

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

输出

Array
(
    [0] => value1
    [1] => value2
)
$string = "value 1, value2";
$string = trim($string, ".");
$split = explode(",", $string);
print_r($split);

你不应该做 2 和 4。如果没有逗号,那么它将拆分为一个元素的数组。

当您爆炸时,并且没有您请求的分隔符,索引 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
//)

试试这段代码

$arr="a,b,c";
$variableAry=explode(",",$arr); 
foreach($variableAry as $var)
{
 echo"<input type='text' value=".$var." ><br/><br/>";
}