分离器内爆和爆炸

时间:2011-11-11 16:57:04

标签: php string

这是一个示例代码

$a=array('a,b','cd');
$b=implode(',',$a);
$c=explode(',',$b);
print_r($c);

因为我有','$ [0] print_r($c);结果

Array ( [0] => a [1] => b [2] => cd

是否有任何选项可以在字符串中爆炸忽略','并且我有

Array ( [0] => a,b [3] => b [2] => cd )

或只有解决方案是选择更好的分隔符,例如“* - ”

3 个答案:

答案 0 :(得分:6)

一旦你用一个已经存在于任何元素中的角色内爆数组,就没有简单的方法来检测它。所以我建议您更改分隔符,否则您最终会将字符串与原始数组进行比较,这将变得一团糟。

答案 1 :(得分:3)

函数implode()explode()完全独立。他们没有彼此的“记忆”或“知识”,也没有彼此所做的事情。

因此,explode()不知道implode()使用了将要使用的字符。事实上,对于某些可能是有效用例的人而言,他们希望将所有逗号分开。

使用任何类型的元或转义字符时,这是一个非常标准的问题。当你看到那个角色并且应该在那里时,你会怎么做?你逃脱逃脱角色。带有转义字符的字符串示例:
"\tHello,\nI need something to do\\think about.\n"

这不仅仅是通过简单的爆炸/内爆来完成的。这是通过解析器修复的。

最简单的方法是让分隔符完全独特。它不必是一个字符。或者你可以做更高度复杂的解析。

$separator = 'abcd1234(*&@#@%asdf___jasldfkj'; // something very unlikely to actually exist
$a=array('a,b', 'cd');
$b=implode($separator, $a);
$c=explode($separator, $b);
print_r($c);

结果:

Array 
( 
    [0] => a,b 
    [1] => cd 
)

答案 2 :(得分:2)

您应该选择一个或多个字符,您知道这些字符不会出现在您将要爆炸/爆炸的文本中。如果你有一堆包含逗号的文本,那么你用逗号将它们全部内部崩溃,你将会非常困难地试图将它们全部用逗号进行爆炸。事实上,如果没有原始数据,这可能是不可能的。