数组业余爱好者

时间:2012-04-08 00:07:08

标签: php arrays string

所以我想说我有一个像这样的字符串。

$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等变量

1 个答案:

答案 0 :(得分:2)

您应该已经知道preg_match_all的简介。

第三个参数是一个数组,其中包含文本中找到的所有匹配项(第二个参数)。

它是一个包含一组不同数组的数组:第一个包含匹配的模式。其他是子模式的匹配。我不是在这里写一篇关于正则表达式的文章然后我会假设你知道它们(刷新:子模式是用括号括起来的那些东西,在你的情况下,是没用的)。

$pizza='1-4,2,3-1,5-4,7';
preg_match_all("/\d\-\d/", $pizza, $return);
var_dump($return);

会有类似的,不那么混乱的结果(正则表达式中没有parens)。

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

但这仅仅是个人品味的问题,因为只需很少的数据操作,性能差异就可以忽略不计。