PHP迭代一个简单的逗号分隔列表

时间:2012-05-31 18:27:03

标签: php

我有一个可以

的字符串
$string = "value.";

OR

$string = "value1, value2.";

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

我在想;

  1. 最后更换点。
  2. 检查是否有逗号。
  3. 如果有逗号,则使用"拆分爆炸,"并迭代。
  4. 如果没有,只需使用一个项目。
  5. 这是正确的做法吗?

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

    谢谢。

7 个答案:

答案 0 :(得分:16)

你是对的,你可以这样做:

$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
}

答案 1 :(得分: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

正则表达式:解释

原始正则表达式只是拆分字符串中的单个字符,如[]所示。因此,/[\.,\s]/匹配字符串中的句点,逗号和空格字符。在考虑之后,这可能不是你想要的,而是关闭的。

更新的正则表达式略有不同,并分为两种不同的场景。 \.\s?说:分割期间和/或前期+空间。 ?使前面的可选(我相信0或1)。与,\s?相同。匹配逗号和/或逗号+空格。这解释了所有场景。使用分组((...))而不是字符范围允许这样做。中间的管道|表示OR,完整的正则表达式表示:匹配句点和/或句点+空格或逗号和/或逗号+空格。

答案 2 :(得分:2)

$string = "value 1, value2";
$string = trim($string, ".");

$split = explode(",", $string);
print_r($split);

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我会使用以下代码:

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

输出

Array
(
    [0] => value1
    [1] => value2
)

答案 5 :(得分: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
//)

答案 6 :(得分:-1)

试试这段代码

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