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 關注
- 135 瀏覽
添加回答
舉報