简体   繁体   English

从特定字符修剪 PHP 字符串

[英]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!问题一旦做以下回答!

enter image description here在此处输入图像描述

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);

Running sample运行示例

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 ➖
)

See a PHP demo .请参阅PHP 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM