使用数组和foreach循环从另一个中获取String

时间:2015-05-08 15:21:13

标签: php arrays foreach explode

我想在另一个地方创建一个字符串:

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;

    }

}

3 个答案:

答案 0 :(得分:7)

如何使用Method执行此任务?

使用正则表达式的代码:

(\d+)

Name

它比循环遍历字符串的每个字符更有效。

正则表达式解释道:

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

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

RegEx将搜索给定字符串中的所有可能(重复)匹配。

答案 1 :(得分: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的每一行检查2次,因此您将检索所有值而不是第一个。

答案 2 :(得分:2)

你所做的几乎是正确的。你只需要在爆炸后连接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;