2014-01-08 288 views
0

我想分割一個字符串,最有可能使用explode或preg_split創建兩個數組。首先是分裂的東西。秒是分隔符。只有兩個分隔符是「AND」或「OR」。PHP將字符串拆分爲兩個數組 - 值拆分和分隔符

例如:

$字符串= 「NAME = John和狀態= GA或國家= CA」;

我想要捕獲的不僅是'名稱=約翰,州= GA,州= CA',而且還要在每個之間的分隔符。

在這個例子中,兩個不同的陣列將是:

array (
     [0] => Name=John 
     [1] => State=GA 
     [2] => State=CA 
) 

array (
     [0] => AND 
     [1] => OR 
) 

在這裏,我可以按摩符合我想要的數據,最終建立一個查詢。如果有更好的方法去解決這個問題,我全都是耳朵。感謝您的幫助!

回答

1

使用PHP Regular Expression。該preg_match_all()功能在您的情況:

Live Demo

代碼:

$input = "Name=John AND State=GA OR State=CA"; 

preg_match_all("/[a-zA-Z]+\s*=\s*[a-zA-Z]+/", $input, $output_1); 
$output_1 = $output_1[0]; 


preg_match_all("/AND|OR/", $input, $output_2); 
$output_2 = $output_2[0]; 

print_r($output_1); 
print_r($output_2); 

輸出:

Array 
(
    [0] => Name=John 
    [1] => State=GA 
    [2] => State=CA 
) 
Array 
(
    [0] => AND 
    [1] => OR 
) 
+0

工程很好,非常感謝! – ad2387

0

如果在字符串中的每個其他部分是分隔符(AND | OR),有不需要使用正則表達式。將該字符串按空格字符分解爲數組,然後將每個其他項目選擇到一個數組,將其他項目選擇到另一個數組。就像這樣:

<?php 
$string = "Name=John AND State=GA OR State=CA"; 
$a = explode(' ', $string); 

$foo = array(); 
$bar = array(); 
$len = count($a); 

for($i = 0; $i < $len; $i++) { 
    if($i % 2 === 0) { 
     $foo[] = $a[$i]; 
    } 
    else { 
     $bar[] = $a[$i]; 
    } 
} 

print_r($foo); 
print_r($bar); 

https://eval.in/87538

而且如果總是有在該字符串的項目相同數量的,沒有必要遍歷它,只是分配2項0和4到一個數組和1和3到其他陣列。

+0

感謝您的評論。實際上,我最初是在發佈之前對它進行了編碼(實際上是在空間上做了preg_split,但與%2有相同的概念)。問題是可以選擇'Name = John'之間有空格。可能是'姓名=約翰','姓名=約翰'等,謝謝你的迴應。上面的答案工作得很好,所以我會去用它。 – ad2387