PHP CLI:如何处理未命名参数

PHP CLI:如何处理未命名参数,php,Php,在要从命令行使用的PHP脚本中: 据我所知,函数getopt只允许处理'named'参数,例如:$args=getopth:m:;将允许使用定义的参数运行脚本,如下所示: ./script.php -h24 -m60; 但是如何得到第一秒,第三。。。未命名的参数,例如: ./script -h24 -m60 additional_argument_1 "argument 2"; $\u服务器['argv']允许获取所有参数,但根据使用的可选命名参数的数量,获取第一个未命名参数并不

在要从命令行使用的PHP脚本中:

据我所知,函数getopt只允许处理'named'参数,例如:$args=getopth:m:;将允许使用定义的参数运行脚本,如下所示:

  ./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
)