使用数组和 foreach 循环从另一个字符串中获取一个字符串
Get a String out of another using arrays and foreach loops
我想从另一个地方创建一个字符串:
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;
}
}
您正在使用 $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 次,因此您将检索所有值而不是第一个。
你所做的几乎是正确的。您只需要在 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;
使用 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]);
它比遍历字符串的每个字符更有效。
正则表达式解释:
可视化为 RailRoad 图的正则表达式:
(\d+)
:第一个\d
匹配一个数字。 +
表示一次或多次。它周围的 ()
创建一个组,这意味着匹配项将存储在 $matches
数组 中
-
:后跟一个简单的破折号
\d+
: 然后又出现一个数字一次或多次
\|?
:还有一个管道符\|
(需要转义)。 ?
表示只有一个或没有管道。
preg-match-all 将在给定字符串中搜索所有可能的(重复的)匹配项。
我想从另一个地方创建一个字符串:
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;
}
}
您正在使用 $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 次,因此您将检索所有值而不是第一个。
你所做的几乎是正确的。您只需要在 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;
使用 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]);
它比遍历字符串的每个字符更有效。
正则表达式解释:
可视化为 RailRoad 图的正则表达式:
(\d+)
:第一个\d
匹配一个数字。+
表示一次或多次。它周围的()
创建一个组,这意味着匹配项将存储在$matches
数组 中
-
:后跟一个简单的破折号\d+
: 然后又出现一个数字一次或多次\|?
:还有一个管道符\|
(需要转义)。?
表示只有一个或没有管道。
preg-match-all 将在给定字符串中搜索所有可能的(重复的)匹配项。