我想在另一个地方创建一个字符串:
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;
}
}
答案 0 :(得分:7)
如何使用Method
执行此任务?
使用正则表达式的代码:
(\d+)
它比循环遍历字符串的每个字符更有效。
正则表达式解释道:
正则表达式可视化为RailRoad图:
\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;