PHP CLI:如何处理未命名参数
在要从命令行使用的PHP脚本中: 据我所知,函数getopt只允许处理'named'参数,例如:$args=getopth:m:;将允许使用定义的参数运行脚本,如下所示:PHP CLI:如何处理未命名参数,php,Php,在要从命令行使用的PHP脚本中: 据我所知,函数getopt只允许处理'named'参数,例如:$args=getopth:m:;将允许使用定义的参数运行脚本,如下所示: ./script.php -h24 -m60; 但是如何得到第一秒,第三。。。未命名的参数,例如: ./script -h24 -m60 additional_argument_1 "argument 2"; $\u服务器['argv']允许获取所有参数,但根据使用的可选命名参数的数量,获取第一个未命名参数并不
./script.php -h24 -m60;
但是如何得到第一秒,第三。。。未命名的参数,例如:
./script -h24 -m60 additional_argument_1 "argument 2";
$\u服务器['argv']允许获取所有参数,但根据使用的可选命名参数的数量,获取第一个未命名参数并不简单
如何轻松获取附加参数和可选的第二个未命名参数的值?我会将getopt与argv结合起来。这将给您一个良好的开端:
<?php
print_r($argc);
print_r($argv);
$getopt = getopt("a::b::c::");
$optionals = array();
// Get all arguments delivered
foreach ($argv as $key1=>$value1) {
// Skip the filename
if ($key1 == 0) {
continue;
}
$match = false;
// Compare to each argument recognized by getopt
foreach ($getopt as $key2=>$value2) {
if ("-".$key2.$value2 === $value1 || "--".$key2.$value2 === $value1) {
$match = true;
break;
}
}
// If it was not recognized by getopt, it is an optional. Keep it.
if (!$match) {
$optionals[] = $value1;
}
}
print_r($optionals);
?>
它将回答:
Array
(
[0] => optional1
[1] => optional2
[2] => optional3
)
此外,这里还有同样非常有趣的建议:
但是,您可能希望使用几个未命名的选项重新考虑您的设计。此外,示例代码可以通过回调重构为PHP数组函数的增强用法,或者将内部循环提取到函数中。但这是一个好的开始。也许您可以简单地在$argv中查找不以破折号开头的参数:
magic$argv数组包含传递给脚本的所有参数。你可以试着过滤掉这些选项,但是我更倾向于不重新发明轮子,而是使用现成的解决方案,就像它对我来说有点过于复杂一样。哦,好吧。我认为如果不使用-name=value语法,这是唯一的方法。
Array
(
[0] => optional1
[1] => optional2
[2] => optional3
)