解析命令行:优化是邪恶的!
这个页面上所有的贡献者都忘记了一件事,那就是你可以用单引号或双引号来搜索argv。因此,与preg_match_all耦合在一起的连接总是会打破这一点:)
这里有一个建议:
#!/usr/bin/php
<?php(电话)
打印(r)(论据($argv(美元)));
功能论据($个参数)
{
阵列_移位($个参数);
$内选项=假;
$ret(美元)=数组
(
“命令”=>数组(),
'选项'=>数组(),
'标志'=>数组(),
'参数'=>数组(),
);
同时($参数=阵列_移位($个参数) )
{
如果($内部期权)
{
$ret美元['参数'][] =$参数;
继续;
}
如果(子(substr)($参数,0,2) ==='--')
{
if(!is设置($参数[三]))
{
$内选项=真的;;继续;
}
价值$="";
$com美元=子(substr)($参数,2);
如果(斯特波斯($com美元,'='))
列表($com美元,价值$) =分裂("=",$com美元,2);
埃尔塞夫(斯特波斯($个参数[0],'-') !==0)
{
同时(斯特波斯($个参数[0],'-') !==0)
价值$.=阵列_移位($个参数).“”;
价值$=rtrim公司(价值$,' ');
}
$ret(美元)['选项'][$com美元]=!空的(价值$) ?价值$:真的;
继续;
}
如果(子(substr)($参数,0,1) ==='-')
{
的(1美元=1; 发行($参数[1美元]) ;1美元++)
$ret(美元)['标志'][] =$参数[1美元];
继续;
}
$ret(美元)[“命令”][] =$参数;
继续;
}
如果(!计数($ret(美元)['选项']) && !计数($ret(美元)['标志']))
{
$ret(美元)['参数'] =阵列_合并($ret(美元)[“命令”],$ret(美元)['参数']);
$ret(美元)['命令']=阵列();
}
返回$ret(美元);
}
退出(0)
?>