我想从另一个字符串中创建一个字符串:
1-第一个字符串是:“4-3_
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;
}
}
发布于 2015-05-08 15:35:45
在这个任务中使用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]);
演示
它比循环遍历字符串的每个字符要有效得多。
Regex解释道:
正则表达式可视化为RailRoad图:
(\d+)
:第一个\d
匹配一个数字。+
指的是一次或多次。它周围的()
创建一个组,这意味着匹配将存储在$matches
数组中。-
:后面跟着一个简单的破折号\d+
:然后又出现了另一个数字一次或多次\|?
:和管道字符\|
(需要转义)。?
意味着完全有一个或没有管道。然后,全场比赛将搜索给定字符串中的所有可能(重复)匹配。
发布于 2015-05-08 15:33:32
您正在使用$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次,所以您将检索所有的值,而不是第一个值。
发布于 2015-05-08 15:34:10
你所做的几乎是正确的。爆炸后,您只需将前端循环中的字符串连在一起即可。
$array_1 = explode('|', $string_1);
$string_2 = '';
foreach ( $array_1 as $item ) {
$array_2 = explode('-', $item);
$string_2.= $array_2[0].' ';
}
echo $string_2;
https://stackoverflow.com/questions/30127358
复制相似问题