2011-11-11 110 views
0

這是一個示例代碼分離器在內爆和爆炸

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

或唯一的解決辦法是選擇更好的分離器,如「* ? 「 - 」

+0

我會用不同的分隔符,也許是'|'。也許你可以讓'$ a'成爲一個多維數組。 –

+0

您試圖解決的實際問題是什麼?可能有一種完全不同的解決方法,與「implode」和「explode」無關。 – evan

回答

6

一旦你使用已經存在於任何元素中的字符爆炸了陣列,就沒有簡單的方法來檢測它了,所以我的建議是讓你改變分隔符,否則你最終會比較你的字符串與原始數組,並將變得一團糟

2

你應該選擇一個字符或多個字符,你知道不會出現在你要爆炸/爆炸的文本如果你有一堆文本那裏面有逗號,然後你用逗號把它們全部打斷,你會非常困難地試圖用逗號把它們全部炸開,實際上,如果沒有原始數據,它可能是不可能的。

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 
)