您应该已经知道preg_match_all的概要。
第三个参数是一个数组,其中包含在您的文本中找到的所有匹配项(第二个参数)。
它是一个包含一组不同数组的数组:第一个包含所有匹配的模式。其他的是子模式的匹配。我不是来写一篇关于正则表达式的文章,那么我会假设你知道它们(刷新:子模式是用括号括起来的那些东西,在你的情况下,它是非常没用的)。
$pizza='1-4,2,3-1,5-4,7';
preg_match_all("/\d\-\d/", $pizza, $return);
var_dump($return);
将产生类似的、不那么令人困惑的结果(正则表达式中没有括号)。
array
0 =>
array
0 => string '1-4' (length=3)
1 => string '3-1' (length=3)
2 => string '5-4' (length=3)
如果您发现 print_r 格式更容易:
Array ([0]=>Array([0]=>1-4 [1]=>3-1 [2]=>5-4))
要一次使用一个元素,您可以使用foreach控制结构。
进行练习的代码应与此类似:
foreach ($return[0] as $slice) {
<do whatever you need with $slice >
}
大括号中的代码将与数组 $return[0](具有匹配切片的数组)中的元素一样多次运行,并且 $slice 将假定不同运行中不同元素的值。
希望这能解决你的疑惑。
说我会使用不同的方法来解决您的任务:
$pizza='1-4,2,3-1,5-4,7';
$return = array_filter(
explode(',',$pizza), // turn the string into an array
function($x){return strpos($x,'-');} // filter out the slices without a -
);
foreach ($return as $slice) { // NOTE: no $return[0]
<do whatever you need with $slice >
}
但这只是个人喜好问题,因为只需操纵这么少的数据量,性能上的差异就可以忽略不计。