首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >业余数组

业余数组
EN

Stack Overflow用户
提问于 2012-04-08 08:07:08
回答 1查看 65关注 0票数 0

假设我有一个这样的字符串。

代码语言:javascript
运行
复制
$pizza = 1,2,3,5-4,7;

我想要得到的是那一组中的5-7,但5-7可以是任何组合,比如6-9或10-1,这种情况会发生多次。

比如

代码语言:javascript
运行
复制
$pizza=1-4,2,3-1,5-4,7;

然后我得到了帮助来使用

代码语言:javascript
运行
复制
preg_match_all("/(\d\-\d)/", $pizza, $return);

这就给了我这个

代码语言:javascript
运行
复制
print_r($return);

Array ( [0] => Array ( [0] => 5-7 ) [1] => Array ( [0] => 5-7 ) )

那么如何获取该值(5-7)并将其赋给像$slice这样的变量呢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 07:37:08

您应该已经了解了preg_match_all的概要。

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

它是一个包含一组不同数组的数组:第一个数组包含所有匹配的模式。其他的是子模式的匹配。我不是在这里写一篇关于正则表达式的文章,那么我将假设你知道它们(刷新一下:子模式是那些用括号括起来的东西,在你的例子中,子模式是非常无用的)。

代码语言:javascript
运行
复制
$pizza='1-4,2,3-1,5-4,7';
preg_match_all("/\d\-\d/", $pizza, $return);
var_dump($return);

将有一个类似的,不那么混乱的结果(正则表达式中没有括号)。

代码语言:javascript
运行
复制
array
  0 => 
    array
      0 => string '1-4' (length=3)
      1 => string '3-1' (length=3)
      2 => string '5-4' (length=3)

如果您发现print_r格式更简单:

代码语言:javascript
运行
复制
Array ([0]=>Array([0]=>1-4 [1]=>3-1 [2]=>5-4))

要一次使用一个数组元素,可以使用foreach控制结构。

完成练习的代码应该与以下代码类似:

代码语言:javascript
运行
复制
foreach ($return[0] as $slice) {
    <do whatever you need with $slice >
}

大括号中的代码将与数组中的元素一样多次运行,$return、0和$slice将在不同的运行中采用不同元素的值。

希望这能解决你的疑虑。

说我会用一种不同的方法来解决你的任务:

代码语言:javascript
运行
复制
$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 >
}

但这只是个人喜好的问题,因为性能上的差异可以忽略不计,因为需要操纵的数据量如此之少。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10059398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档