假设我有一个这样的字符串。
$pizza = 1,2,3,5-4,7;
我想要得到的是那一组中的5-7,但5-7可以是任何组合,比如6-9或10-1,这种情况会发生多次。
比如
$pizza=1-4,2,3-1,5-4,7;
然后我得到了帮助来使用
preg_match_all("/(\d\-\d)/", $pizza, $return);
这就给了我这个
print_r($return);
Array ( [0] => Array ( [0] => 5-7 ) [1] => Array ( [0] => 5-7 ) )
那么如何获取该值(5-7)并将其赋给像$slice
这样的变量呢
发布于 2012-04-11 07:37:08
您应该已经了解了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 >
}
但这只是个人喜好的问题,因为性能上的差异可以忽略不计,因为需要操纵的数据量如此之少。
https://stackoverflow.com/questions/10059398
复制相似问题