我想将一个数组从命令行传递给php:
c:\<path>\php.exe somefile.php --filter array{['name']=>"lion",['category']=>array{['teeth']=>'long_teeth',['height']=>'short'}}
现在在代码中我希望变量过滤器作为数组,因为我通过命令行传递:
$opt['filter'] = array {
['name']=>"lion",
['category']=>
array{
['teeth']=>'long_teeth',
['height']=>'short'
}
}
但问题是传递参数变为字符串,我无法将其解析为数组。 我使用getopt()函数将过滤器作为数组变量$ opt的属性,如:
$shortopts = "abc"; // These options do not accept values
$longopts = array(
"filter:", // Required value
);<br>
$opt = getopt($shortopts, $longopts);
实际上整个场景是将变量作为数组或字符串或布尔值,并将其传递给另一个PHP脚本,因为它是我通过exec函数调用的脚本,如:
exec(c:\<path>\php.exe myphpscript.php --filter $array_variable );
然后在myphpscript.php中,我想在早期脚本中使用$array_variable
,以便我可以按原样使用它。
答案 0 :(得分:1)
命令行参数是字符串,只有字符串。
如果要传递分层元素,唯一的选择是解析字符串。但是,JSON编码很好,简单,紧凑。
在命令行上传递以下内容然后使用json_decode进行解析将为您提供所需的结果;
{"Name":"Lion","Category":{"teeth":"long_teeth","height":"short"}}
简单证明:
$opt = '{"Name":"Lion","Category":{"teeth":"long_teeth","height":"short"}}';
print_r(json_decode($opt));
答案 1 :(得分:0)
命令行参数只能是字符串,没有办法直接在命令行上传递任何复杂的数据结构,如数组。您可以将数组序列化到一个字符串中,并在程序中取消序列化该参数。因此,您可以将数组作为字符串传递。最明显的候选者是JSON格式,请参阅json_decode
。