2014-01-08 243 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