这有点蛮力,但它更好地解决了我的相关问题。根据 user3307546 的回答:
function get_opts() {
$opts = array();
foreach($_SERVER["argv"] as $k => $a){
if(preg_match( '@\-\-(.+)=(.+)@' , $a, $m))
$opts[$m[1]] = $m[2];
elseif(preg_match( '@\-\-(.+)@' , $a, $m))
$opts[$m[1]] = true;
elseif(preg_match( '@\-(.+)=(.+)@', $a, $m))
$opts[$m[1]] = $m[2];
elseif(preg_match( '@\-(.+)@' , $a, $m))
$opts[$m[1]] = true;
else
$opts[$k] = $a;
}
return $opts;
}
所以
> php cli/index.php gen/cache/reports -e --refresh-api -s="2020-04-16" -v
被解析为
{
0: "cli/index.php",
1: "ttd/cache/reports",
"e": true,
"refresh-api": true,
"s": "2020-04-16",
"v": true
}
所有“非选项”都以其在哈希键中的序号位置出现。