如何使用 php 分解字符串,删除多余的字符

How to use php to explode string, remove extra characters

我使用 PHP 有一段时间了,遇到一个问题,将字符串转换为数组(分解),然后简单地删除每个元素周围的系统输出字符并不容易实现。

我有一串类别输出需要处理:

2;#Ecosystems;#3;#Core Science Systems (CSS);#4;#Energy and Minerals;#5;#Director

我试过下面这个特定的代码:

$text = "2;#Ecosystems;#3;#Core Science Systems (CSS);#4;#Energy and Minerals;#5;#Director";
$explode = explode('#' ,  $text);
foreach ($explode as $key => $value)
{
    ob_start();
    echo ''.$value.''; 
    $myStr = ob_get_contents();
    ob_end_clean();

}
echo "$myStr"

返回的唯一元素是:

 Director

有人能给我指出正确的方向吗?我想这样查看字符串:

Ecosystems; Core Science Systems (CSS); Energy and Minerals; Director

你的问题与问题无关,你用每次 foreach 迭代覆盖你的缓冲区,解决方法是

$myStr .= ob_get_contents();

对于您给出的这个确切示例,您可以将爆炸更改为拆分;#

$text = "2;#Ecosystems;#3;#Core Science Systems (CSS);#4;#Energy and Minerals;#5;#Director";
$categories = array();
$explode = explode(';#' ,  $text);
foreach ($explode as $key => $value)
{
    if (!is_numeric($value)) {
        $categories[] = $value;
    }
}
echo implode("; ", $categories);

$arr = explode("#", $text);

然后您可以用不同的方式回显数组

echo $arr[0] <= 数字表示数组值的索引。

原因是您将 ob_start() 和 ob_end_clean() 都放在了循环中。将它们放在循环之外:

ob_start();
foreach ($explode as $key => $value)
{
   echo ''.$value.''; 
   $myStr = ob_get_contents();
}
ob_end_clean();
echo "$myStr";

我会使用 preg_split 并且这样做:

$result = implode(' ', preg_split('/#?\d+;#/', $text, null, PREG_SPLIT_NO_EMPTY));

$myStr = ob_get_contents();

这将取代 $myStr。您可能想要做的是添加:

$myStr .= ob_get_contents();

虽然查看了您所需的输出,但您的代码不会实现您想要的,因为您没有删除前面的部分,例如#1;.

试试这个

$text = "2;#Ecosystems;#3;#Core Science Systems (CSS);#4;#Energy and Minerals;#5;#Director";
$text = preg_replace('/(#?[0-9];#)/', ' ', $text);
echo $text;

输出:Ecosystems; Core Science Systems (CSS); Energy and Minerals; Director

这解决了问题,您可以微调输出:

$text = "2;#Ecosystems;#3;#Core Science Systems (CSS);#4;#Energy and Minerals;#5;#Director";
$explode = explode('#' ,  $text);
$myStr = '';
foreach ($explode as $key => $value)
{
  $myStr .= $value;
}
echo "$myStr"