gpt4 book ai didi

php的命令行选项解析,howto

转载 作者:可可西里 更新时间:2023-11-01 00:18:08 26 4
gpt4 key购买 nike

我在 PHP 5.2 中使用 Console_Getopt,发现它与其他语言(perl、bash、java)中的 getopt 有多么不同令人惊讶。谁能推荐如何从返回的数组“$opts”中解析参数?

php myprog.php -a varA -c -b varB

$o= new Console_Getopt;
$opts = $o->getopt($argv, "a:b:c");
print_r($opts);

//下面的 print_r 返回

Array
(
[0] => Array
(
[0] => Array
(
[0] => a
[1] => varA
)

[1] => Array
(
[0] => c
[1] =>
)

[2] => Array
(
[0] => b
[1] => varB
)

)

[1] => Array
(
)

)

我开始做类似下面的事情,这是冗长的,所以我正在寻找有关在 php 中处理命令行标志的建议。

foreach($opts[0] as $i -> $keyval) {
list($key, $val) = $keyval;
if($key == 'a') {
print "valueForA: $val\n";
} else if($key == 'b') {
print "valueForB: $val\n";
} else if($key == 'c') {
print "c is set\n";
}
}

我想知道为什么 PHP 的 getopt 不像 perl 的,其中数组的键是标志,例如 $opts{'a'} .. 这样会很方便。

最佳答案

检查 PHP 的 GetOptionKit:

https://github.com/c9s/php-GetOptionKit

概要

use GetOptionKit\OptionCollection;
use GetOptionKit\OptionParser;

$options = new OptionCollection;
$options->add( 'f|foo:' , 'option require value' ); # returns spec object.

$options->add( 'b|bar+' , 'option with multiple value' );
$options->add( 'z|zoo?' , 'option with optional value' );

$options->add( 'f|foo:=i' , 'option require value, with integer type' );
$options->add( 'f|foo:=s' , 'option require value, with string type' );

$options->add( 'v|verbose' , 'verbose flag' );
$options->add( 'd|debug' , 'debug flag' );


$parser = new OptionParser($options);
$result = $parser->parse( array( 'program' , '-f' , 'foo value' , '-v' , '-d' ) );

$spec = $result->verbose;
$spec = $result->debug;
$spec->value; # get value

GetOptionKit\OptionPrinter 可以为您打印选项:

* Available options:
-f, --foo option requires a value.
-b, --bar option with multiple value.
-z, --zoo option with optional value.
-v, --verbose verbose message.
-d, --debug debug message.
--long long option name only.
-s short option name only.

关于php的命令行选项解析,howto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com