我已经使用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
答案 0 :(得分:1)
你的问题与问题无关,你用每个foreach迭代覆盖你的缓冲区,修复是
$ myStr
.
= ob_get_contents();
答案 1 :(得分:1)
对于这个确切的示例,您可以将爆炸更改为拆分;#
$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);
答案 2 :(得分:1)
$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
答案 3 :(得分:0)
原因是你将ob_start()和ob_end_clean()放在循环中。把它们放在循环外面:
ob_start();
foreach ($explode as $key => $value)
{
echo ''.$value.'';
$myStr = ob_get_contents();
}
ob_end_clean();
echo "$myStr";
答案 4 :(得分:0)
我会使用preg_split
并按照这样做:
$result = implode(' ', preg_split('/#?\d+;#/', $text, null, PREG_SPLIT_NO_EMPTY));
答案 5 :(得分:0)
这解决了问题,你可以微调输出:
$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"
答案 6 :(得分:-1)
$ arr = explode(“#”,$ text);
然后您可以用不同的方式回显数组
echo $ arr [0]< =数字代表数组值的索引。