0

コマンドラインから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 );$array_variable以前のスクリプトにあったので、そのまま使用できます。

4

2 に答える 2

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));
于 2012-07-03T07:01:21.693 に答える
0

コマンド ライン引数は文字列のみです。配列などの複雑なデータ構造をコマンド ラインで直接渡す方法はありません。ただし、配列を文字列にシリアル化し、プログラムでその引数をシリアル化解除できます。したがって、配列を文字列として渡すことができます。最も明白な候補は JSON 形式です。 を参照してください。json_decode

于 2012-07-03T06:19:17.117 に答える