>我有一个字符串,可以是
$string = "value.";
或
$string = "value1, value2.";
我想遍历这个字符串,获取第二个示例中的 -> value
(在第一个示例中)和 -> value1
AND value2
的每个项目(最后没有逗号或点)。
我在想;
- 替换末尾的点。
- 检查是否有逗号。
- 如果有逗号,则使用 ", " 进行拆分-分解并迭代。
- 如果没有,只有一个项目,所以只需使用它。
这是正确的做法吗?
我是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/>";
}