繁体   English   中英

PHP将字符串拆分为两个数组-值拆分和定界符

[英]PHP split string into two arrays - values split and delimiters

我想最有可能使用explode或preg_split拆分一个字符串,以创建两个数组。 首先是拆分的内容。 秒是定界符。 仅有的两个定界符将是“ AND”或“ OR”。

例如:

$ string =“名称= John AND St​​ate = GA OR State = CA”;

我不仅要捕获'Name = John,State = GA,State = CA',还要捕获每个之间的分隔符。

对于此示例,两个单独的数组将是:

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

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

从这里,我可以对数据进行按摩以使其符合我的要求,最后构建查询。 如果有更好的解决方案,我会全力以赴。 感谢您提供的所有帮助!

使用PHP 正则表达式 您的情况下的preg_match_all()函数:

现场演示

码:

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

如果该字符串中的其他所有内容都是定界符(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

而且,如果该字符串中始终有相同数量的项目,则无需遍历它,只需将项目0、2和4分配给一个数组,将项目1和3分配给另一个数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM