0 レビュー
1 回答
php-コマンドライン引数/argvの解析
したがって、渡されるコマンドライン引数を解析するパーサーを作成する必要があります。以下は私がこれまでに持っているコードです。
public function parse($argv = null)
{
$argv = $this->argsUnparsed;
$argvs = array();
array_shift($argvs);
foreach($argv as $arg)
{
// This is supposed to find the -- characters in a string
if(substr($arg,0,2) == '--')
{
$equals = strpos($arg, '=');
// If character in string equals '=' saving anything before it as a key and anything afterward as a value
if($equals)
{
$argvs[substr($arg,2,$equals - 2)] = substr($arg,$equals + 1);
}
else
{
$k = substr($arg,2);
if(!isset($argvs[$k]))
{
$argvs[$k] = true;
}
}
}
else if(substr($arg,0,1) == '-')
{
foreach(str_split(substr($arg,1)) as $k)
{
if(!isset($argvs[$k]))
{
$argvs[$k] = true;
}
elseif($equals == false)
{
$argvs[substr($arg,2,$equals - 2)] = substr($arg,$equals + 1);
}
}
}
else
{
$argvs[] = $arg;
}
}
return $argvs;
}
これは、コマンドライン引数を解析する関数です。私の問題は、「php testArgs.php -v -T 4 -l val1、val2、val3 --names = Austin、Duncan、Eddie --type = gold」と入力すると、次のように出力されることです。
Array
(
[0] => testArgs.php
[v] => 1
[T] => 1
[1] => 4
[l] => 1
[2] => val1,val2,val3
[names] => Austin,Duncan,Eddie
[type] => gold
)
2番目と最後の2つのアレイスロットは完全に正しいですが、残りは次のように印刷する必要があります。
[T] => 4
[l] => val1,val2,val3
また、最初の配列キーと値のペア、[0]=>testArgs.phpは表示されません。
わからない
0
レビュー
答え :
解決策:
2番目と3番目のelse if
ブロックはもっと単純なはずです。
次のようなものを試してください:
<?php
..。
//「-」で始まるキーが渡されているかどうかを確認します
else if(substr($ arg、0,1)=='-')
{{
$ k = substr($ arg、1);
if(!isset($ argvs [$ k]))
{{
$ argvs [$ k] = true;
$ previous_key = $ k;
}
}
//解析中の値を前のキーにコピーします
else if(!is_empty($ previous_key))
{{
$ argvs [$ previous_key] = $ arg;
}
$ previous_key = "";
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。