2014-11-04 61 views
0

我有我的标签行:需要爆炸标签数组中的PHP语言

word1 word2 word3 "word4 word1" word4 "word7 word4" "word67 word56 word1" word7 

需要得到一切阵列,如:

word1 
word2 
word3 
word4 word1 
word4 
word7 word4 
word67 word56 word1 
word7 

需要与爆炸做到这一点(”“ ,$输入)和爆炸(“\””,$输入)的组合,或其他什么东西,但我不知道如何..

回答

3

我认为最好的方法是使用str_getcsv

例子:

var_dump(str_getcsv('word1 word2 word3 "word4 word1" word4 "word7 word4" "word67 word56 word1" word7', ' ', '"')); 
+0

之初,CSV仅仅是一个逗号分隔值的字符串,你的情况逗号) – Etienne 2014-11-04 13:53:26

+0

@Jay,str_getcsv是用来解析CSV行为字符串的,Etienne只是用它来代替这个应用程序,非常聪明 – Ozzy 2014-11-04 14:04:08

+0

我已经在许多标签变体中测试了这个函数,它是完美的我一直在寻找:) – vagiz 2014-11-04 14:05:14

0

我建议你使用preg_match_all()。一个例子你

$str = 'word1 word2 word3 "word4 word1" word4 "word7 word4" "word67 word56 word1" word7'; 
preg_match_all('/(word\d)|("([^"]*)")/', $str, $m); 

print '<pre>'; 
print_r($m[0]); 
print '</pre>'; 
0

如果你不想下井使preg_split路线,你可以这么爆炸(” \‘’,$输入),然后去通过输出,并且在数组项没有尾随“,按空间分割。它确实有尾随”,将其删除。

这不是一个完美的解决方案,而且是可行的。

$round1 = explode(" \"", $input); // split based on the " at the start 
$round2 = array(); 
foreach ($round1 as $word) { 
    if (substr($word,-1) == "\"") { 
     $round2[] = str_replace("\"","",$word); // get rid of the trailing " 
    } 
    else { 
     // need to merge our existing array with the exploded array 
     $round2 = array_merge($round2, explode(" ", $word); 
    } 
}