我有一个可以
的字符串$string = "value.";
OR
$string = "value1, value2.";
我想遍历此字符串,获取每个项目 - > value
(在第一个示例中)和 - >第二个value1
和value2
(最后没有逗号或点)。
我在想;
这是正确的做法吗?
我是PHP的新手,并尝试学习解决问题的最佳实践和最佳方法。
谢谢。
答案 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/>";
}