我想将一根绳子分解成不同的部分,由于绳子的性质,我无法完全弄清楚如何去做这件事或者是否可能。
下面是我试图分解的字符串:
"'1,2,3,4','2,4,5,6,4',NULL, NULL,NULL ,'2,3,4,5', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
我想要这样:
'1,2,3,4',
'2,4,5,6,4',
NULL,
NULL,
'2,3,4,5'
我正在考虑做这样的事情:
$test = 'CALL sp_advert_search_load(\'1,3,4,5\',\'2,4,3\',NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)';
$test1 = explode( '(',$test);
$test1 = explode( ',',$test1[1]);
foreach ($test1 as $food) {
echo $food."<br />";
}
然后尝试使用 ' 以及起点和终点以某种方式将数组重新构建为字符串。
你似乎有两个问题,但这还是把它分成了两部分。
首先是从
CALL
中提取参数部分,这会找到第一个 (
并获取字符串的其余部分。 然后它使用 rtrim()
去除尾随的 )
(如果有的话也可以使用空格)。
第二部分是将字符串拆分为每个参数。 由于它现在实际上是一个 CSV,因此我使用
str_getcsv()
进行拆分,并用 '
作为外壳将各组保持在一起...
$test = 'CALL sp_advert_search_load(\'1,3,4,5\',\'2,4,3\',NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)';
$params = rtrim(substr($test, strpos($test, "(") + 1), " )");
print_r(str_getcsv($params, ",", "'"));
给予...
Array
(
[0] => 1,3,4,5
[1] => 2,4,3
[2] => NULL
[3] => NULL
[4] => NULL
[5] => NULL
[6] => NULL
[7] => NULL
[8] => NULL
[9] => NULL
[10] => NULL
[11] => NULL
[12] => NULL
[13] => NULL
[14] => NULL
[15] => NULL
[16] => NULL
[17] => NULL
[18] => NULL
[19] => NULL
[20] => NULL
[21] => NULL
[22] => NULL
[23] => NULL
[24] => NULL
[25] => NULL
[26] => NULL
[27] => NULL
[28] => NULL
[29] => NULL
[30] => NULL
)
因为我很无聊,只需提取括号之间的内容,然后
eval
将其作为数组:
preg_match('/\(.*\)/', $test, $match);
eval("\$result = array$match[0];");
或者:
preg_match('/\((.*)\)/', $test, $match);
eval("\$result = [$match[1]];");
这些将为您提供实际的
NULL
值,而不是字符串 "NULL"
,因此您只能在 var_dump
中看到它们。