Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过命令行将层次结构数组传递给php文件_Php_Arrays_Command Line - Fatal编程技术网

如何通过命令行将层次结构数组传递给php文件

如何通过命令行将层次结构数组传递给php文件,php,arrays,command-line,Php,Arrays,Command Line,我想将数组从命令行传递到php,如下所示: c:\<path>\php.exe somefile.php --filter array{['name']=>"lion",['category']=>array{['teeth']=>'long_teeth',['height']=>'short'}} 但问题是传递的参数变成了字符串,我无法将其解析为数组。 我使用getopt()函数将过滤器作为数组变量$opt的属性,如下所示: $shortopts = "a

我想将数组从命令行传递到php,如下所示:

c:\<path>\php.exe somefile.php --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);
$shortopts=“abc”//这些选项不接受值
$longopts=数组(
筛选器:,//必需值
);
$opt=getopt($shortopts,$longopts);
实际上,整个场景是将一个变量作为数组、字符串或布尔值传递给另一个php脚本,我通过exec函数调用该脚本,如:
exec(c:\\php.exe myphpscript.php——过滤器$array\u变量)

然后在myphpscript.php中,我想像在前面的脚本中一样使用
$array\u variable
,这样我就可以原样使用它。

命令行参数只能是字符串,无法在命令行上直接传递任何复杂的数据结构,如数组。不过,您可以将数组序列化为字符串,并在程序中取消序列化该参数。因此可以将数组作为字符串传递。最明显的候选格式是JSON格式,请参阅

命令行参数是字符串且仅为字符串

当您想要传入一个层次元素时,唯一的选择就是解析字符串。然而,JSON编码是好的、简单的和紧凑的

在命令行上传递以下命令,然后使用解析将得到所需的结果

{"Name":"Lion","Category":{"teeth":"long_teeth","height":"short"}}
简单证明:

$opt = '{"Name":"Lion","Category":{"teeth":"long_teeth","height":"short"}}';
print_r(json_decode($opt));

但是它作为stdclass对象打印,我想把传递的字符串作为数组对象返回,这样我就可以访问$opt['Name']和$opt['Category']['height']作为其他用途;无法使用print_r(json_decode($opt))这是因为您使用了错误的引号;与PHP和JavaScript不同,引号是不可互换的。JSON需要“标识字符串,参考
$opt = '{"Name":"Lion","Category":{"teeth":"long_teeth","height":"short"}}';
print_r(json_decode($opt));