2 回答
TA贡献1946条经验 获得超4个赞
您似乎有两个问题,但这无论如何都将其分为两部分。
首先是从 中提取参数部分CALL,这会找到第一个参数(并获取字符串的其余部分。然后它用来rtrim()去除尾随)(如果有的话也去除空格)。
第二部分是将字符串拆分为每个参数。因为它现在实际上是一个 CSV,所以我用a作为附件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
)
TA贡献1816条经验 获得超4个赞
因为我很无聊,只需提取括号之间的内容,然后将eval其作为数组:
preg_match('/\(.*\)/', $test, $match);
eval("\$result = array$match[0];");
或者:
preg_match('/\((.*)\)/', $test, $match);
eval("\$result = [$match[1]];");
这些将为您提供实际NULL值而不是字符串"NULL",因此您只能在var_dump.
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报