2016-01-19 4 views
0

Мы знаем, что вы можете легко получить массив аргументов из командной строки с предопределенной переменной .

Есть ли какой-либо простой способ получить массив из строки вместо командной строки?
Мне нужно написать несколько тестов для соответствующей библиотеки.

Например, при запуске script.php -a b -c d, в script.php,
вы могли бы получить со значением ["script.php", "-a", "b", "-c", "d"].
Итак, мой вопрос в том, что внутри php-скрипта
как я могу получить этот массив из строки, скажем "-a b -c d" здесь, не передавая строку в командную строку, а в переменную?

Мне не нужно разбирать параметры здесь.

Самый простой способ сделать это:

$array = preg_split ("/\s+/", $str); 

Однако, это не может покрыть строки с пробелами внутри значения параметра.
Скажи:

-a "some thing" 
+0

Что вы имеете в виду «получить массив из строка "? –

+0

@RobbieAverill Например, когда вы запускаете 'script.php -ab -cd', в' script.php', вы можете получить '$ argv' со значением' ["script.php", "-a", "b "," -c "," d "]'. Итак, вот мой вопрос в том, что внутри php-скрипта, как я могу получить этот массив из строки, скажем, '' -a b -c d '' здесь? –

+0

В конце вашего вопроса вы намекаете, что между тем, что называется флагами и аргументами со значениями, существует другое. Если вы ищете универсальное решение, я предлагаю вам использовать стороннюю библиотеку, например https://github.com/nategood/commando, ведь вы можете более или менее передавать строку, а затем получать доступ к своим значениям с помощью хорошего API , – Michael

ответ

2

Хорошо, никто не ответил на этот вопрос, я хотел бы предложить одно решение здесь:

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