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

时间:2012-07-03 06:13:17

标签: php arrays command-line

我想将一个数组从命令行传递给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,以便我可以按原样使用它。

2 个答案:

答案 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