[英]Trim PHP string from specific characters
Have an array with multiple data.有一个包含多个数据的数组。 Each array index has a string that is separated by a ">" symbol.每个数组索引都有一个由“>”符号分隔的字符串。 Finally, it should display the last part of each index string.最后,它应该显示每个索引字符串的最后一部分。
Here is the current array.这是当前数组。 Please note the emoji is required.请注意表情符号是必需的。
(
[0] => val 1
[1] => val 1 > Search ➖
[2] => val 1 > Search ➖ > Plain search ✔
[3] => val 1 > val 2 ➖ > Val 3 ➖
[4] => val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖
[5] => val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖
[6] => val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ➖
[7] => val 1 > Search ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ✔
[8] => val 1 > val 2 ➖
[9] => val 1 > val 2 ➖ > Val 3 ✔
[10] => val 1 > val 2 ➖ > Val 3 ➖
)```
What should be the sorted output is,
```Array
(
[0] => val 1
[1] => Search ➖
[2] => Plain search ✔
[3] => Val 3 ➖
[4] => Val 4 ➖
[5] => Val 4 ➖
[6] => Val 5 ➖
[7] => Val 5 ✔
[8] => val 2 ➖
[9] => Val 3 ✔
[10] => Val 3 ➖
)```
What I have tried is,
```$x = ltrim(stristr($x, '>'), '>');
$x = ltrim(stristr($x, '>'), '>');
echo $x;
But this is only up to two ">"s.但这最多只有两个“>”。 The number of ">" can't determine. “>”的数量无法确定。 It can be infinite.它可以是无限的。 What is the best looping method to do this?执行此操作的最佳循环方法是什么?
The issue once doing the following answers!问题一旦做以下回答!
You can use this code:您可以使用以下代码:
$x = trim(end(explode('>',$x)))
It first splits the string everywhere that the '>' character occours, than gets the last element of the splitted string and removes the leading and trailing whitespaces.它首先在出现“>”字符的任何地方拆分字符串,然后获取拆分字符串的最后一个元素并删除前导和尾随空格。
Splitting strings in PHP and get last part Here you can find some more examples. 在 PHP 中拆分字符串并获取最后一部分在这里您可以找到更多示例。
Here is a more verbose example:这是一个更详细的示例:
<?php
$search = [
"val 1",
"val 1 > Search ➖",
"val 1 > Search ➖ > Plain search ✔",
"val 1 > val 2 ➖ > Val 3 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ➖",
"val 1 > Search ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ✔",
"val 1 > val 2 ➖",
"val 1 > val 2 ➖ > Val 3 ✔",
" val 1 > val 2 ➖ > Val 3 ➖",
];
$result = array_map(
function (string $item): string {
$splittedString = explode('>', $item);
$lastElement = end($splittedString);
$removedWhitespaceAtBeginningAndEnd = trim($lastElement);
return $removedWhitespaceAtBeginningAndEnd;
},
$search
);
print_r($result);
and here is the output这是 output
Array
(
[0] => val 1
[1] => Search ➖
[2] => Plain search ✔
[3] => Val 3 ➖
[4] => Val 4 ➖
[5] => Val 4 ➖
[6] => Val 5 ➖
[7] => Val 5 ✔
[8] => val 2 ➖
[9] => Val 3 ✔
[10] => Val 3 ➖
)
Regex solution that captures everything after the last occurrence of " > "
.在最后一次出现" > "
之后捕获所有内容的正则表达式解决方案。
Regex: /(?:.+ > )?(.+)/
正则表达式: /(?:.+ > )?(.+)/
$search = [
"val 1",
"val 1 > Search ➖",
"val 1 > Search ➖ > Plain search ✔",
"val 1 > val 2 ➖ > Val 3 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ➖",
"val 1 > Search ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ✔",
"val 1 > val 2 ➖",
"val 1 > val 2 ➖ > Val 3 ✔",
"val 1 > val 2 ➖ > Val 3 ➖"
];
print_r($search);
$result = [];
foreach ( $search as $row )
{
preg_match('/(?:.+ > )?(.+)/', $row, $matches);
$result[] = $matches[1];
}
print_r($result);
You can do first a foreach, and next take the text after the last ">" with strrpos.你可以先做一个foreach,然后用strrpos获取最后一个“>”之后的文本。 Here you have an example.这里有一个例子。 ` `
$search = array (
0 => "val 1",
1 => "val 1 > Search ➖",
2 => "val 1 > Search ➖ > Plain search ✔",
3 => "val 1 > val 2 ➖ > Val 3 ➖",
4 => "val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
5 => "val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
6 => "val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ➖",
7 => "val 1 > Search ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ✔",
8 => "val 1 > val 2 ➖",
9 => "val 1 > val 2 ➖ > Val 3 ✔",
10 =>" val 1 > val 2 ➖ > Val 3 ➖"
) ;
$result = array ( ) ;
foreach ( $search as $row )
{
$result [ ] = str_replace ( "> " , "" , substr ( $row , strrpos ( $row , ">" ) ) ) ;
}
` `
You can use preg_replace and pass your array to it with a pattern:您可以使用preg_replace并使用模式将数组传递给它:
^.*>\h*
Explanation解释
^
Start of string ^
字符串开头.*>
Match the last occurrence of >
.*>
匹配最后一次出现的>
\h*
Match optional trailing spaces \h*
匹配可选的尾随空格In the replacement use an empty string.在替换中使用空字符串。
Example例子
$arr = [
"val 1",
"val 1 > Search ➖",
"val 1 > Search ➖ > Plain search ✔",
"val 1 > val 2 ➖ > Val 3 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖",
"val 1 > val 2 ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ➖",
"val 1 > Search ➖ > Val 3 ➖ > Val 4 ➖ > Val 5 ✔",
"val 1 > val 2 ➖",
"val 1 > val 2 ➖ > Val 3 ✔",
" val 1 > val 2 ➖ > Val 3 ➖",
];
$result = preg_replace("/^.*>\h*/", "", $arr);
print_r($result);
Output Output
Array
(
[0] => val 1
[1] => Search ➖
[2] => Plain search ✔
[3] => Val 3 ➖
[4] => Val 4 ➖
[5] => Val 4 ➖
[6] => Val 5 ➖
[7] => Val 5 ✔
[8] => val 2 ➖
[9] => Val 3 ✔
[10] => Val 3 ➖
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.