Мы знаем, что легко можем получить массив аргументов из командной строки с предопределенной переменной $argv
,
Есть ли простой способ получить массив из строки вместо командной строки?
Мне нужно написать несколько тестов для связанной библиотеки.
Например, когда вы запускаете script.php -a b -c d
, в script.php
,
ты мог бы получить $argv
со значением ["script.php", "-a", "b", "-c", "d"]
,
Итак, мой вопрос в том, что внутри сценария php
как я могу получить этот массив из строки, скажем, "-a b -c d"
здесь не путем передачи строки в командную строку, а в переменную?
Мне не нужно разбирать варианты здесь.
Самый простой способ сделать это:
$array = preg_split ("/\s+/", $str);
Однако это не может покрывать строки пробелами внутри значения параметра.
Сказать:
-a "some thing"
Хорошо, никто не ответил на это, я бы предложил одно решение здесь:
function getArgv ($string) {
global $argv;
preg_match_all ('/(?<=^|\s)([\'"]?)(.+?)(?<!\\\\)\1(?=$|\s)/', $string, $ms);
$argv = $ms[2];
}
getArgv("-a b -c d");
print_r ($argv);
getArgv('-a \'b -c d\' -c "da fwe\" a" awf="sadf"');
print_r ($argv);
Выход:
Array(
[0] => -a
[1] => b
[2] => -c
[3] => d
)
Array
(
[0] => -a
[1] => b -c d
[2] => -c
[3] => da fwe\" a
[4] => awf="sadf")
Других решений пока нет …