【问题标题】:Get a String out of another using arrays and foreach loops [closed]使用数组和foreach循环从另一个字符串中获取一个字符串[关闭]
【发布时间】:2015-05-08 15:21:13
【问题描述】:

我想从另一个 where 创建一个字符串:

1- 第一个字符串是:“4-3|5-2|9-6|7-1|2-8”

2- 新字符串必须是:"4, 5, 9, 7, 2"

我有这段代码,但它不起作用:

$string_1 = '4-3|5-2|9-6|7-1|2-8';

$array_1 = explode('|', $string_1);

$string_2 = '';

foreach ( $array_1 as $item ) {

    $array_2 = explode('-', $item);

    foreach ( $array_2 as $item_id => $item_value ) {

        $string_2 .= ($string_2 == '') ? $item_id : ', ' . $item_id;

    }

}

【问题讨论】:

  • 哪种语言? (在我看来像 PHP ......)当你说“不起作用”时,它有什么作用?
  • @Almo,是的,它肯定是 PHP,结果是这样的:在数据库中:1-5|2-7|3-1|4-4|5-5|6- 3|7-2|8-2|9-6|13-2 结果:1, 5, 2, 7, 3, 1, 4, 4, 5, 5, 6, 3, 7, 2, 8, 2、9、6、1、2
  • 您可以编辑您进入问题的结果。

标签: php arrays foreach explode


【解决方案1】:

在这个任务中使用RegEx 怎么样?

使用正则表达式的代码:

$string_1 = '4-3|5-2|9-6|7-1|2-8';
preg_match_all('/(\d+)-\d+\|?/',$string_1,$matches);
$string_2 = implode(", ", $matches[1]);

Demo

这比遍历字符串的每个字符要高效得多。


正则表达式解释:

正则表达式可视化为 RailRoad 图:

  • (\d+):第一个 \d 匹配一个数字。 + 表示一次或多次。它周围的() 创建了一个组,这意味着匹配项将存储在$matches 数组中
  • -:后面是一个简单的破折号
  • \d+: 然后又出现一个或多个数字
  • \|?:还有一个竖线字符\|(需要转义)。 ? 表示只有一个或没有管道。

preg-match-all 然后将搜索给定字符串中所有可能的(重复的)匹配项。

【讨论】:

  • 虽然这可能有效,但它并不能帮助人们理解如何解决这些问题,因为正则表达式是不透明的。 :) 也许包括关于你的正则表达式如何工作的解释。
  • @Almo:刚刚添加 :)
  • 赞成,现在回答很好。 :)
【解决方案2】:

您使用的是$item_id,但它代表$array_2 索引。试试这个:

foreach ( $array_1 as $item ) {
    $array_2 = explode('-', $item);
    $string_2 .= ($string_2 == '') ? $array_2[0] : ', ' . $array_2[0];
}

第二个循环不是必需的,它将检查$array_1 的每一行两次,因此您将检索所有值而不是第一个。

【讨论】:

    【解决方案3】:

    你所做的几乎是正确的。您只需要在explode 之后连接foreach 循环中的字符串。

    $array_1 = explode('|', $string_1);
    
    $string_2 = '';
    
    
    foreach ( $array_1 as $item ) {
    
        $array_2 = explode('-', $item);
    
        $string_2.= $array_2[0].' ';
    
    }
    echo $string_2;
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多