如何使用 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"
我使用 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"