2012-02-24 4 views
1

$ _SERVER ['argv']配列を1つの配列に解析する必要があります。

パラメータの取得方法を決定できます。

したがって、たとえばスクリプトは、このように呼ばれていました:php script.php name:jack operation:full

私はこのような$ _SERVER [「argvの」]でパラメータを取得:

Array 
(
    [0] => script.php 
    [1] => name:jack 
    [2] => operation:full_res 
) 

どのように私は簡単に一つにそれらのパラメータを移動することができますこのようなものだ配列:

の$ PARAM:

Array(['name'] => jack ['operation'] => full_res) 
+0

これはCLI arg処理用ですか?その場合、 '$ argv'はおそらくいいでしょうか? – quickshiftin

+0

これらの人によるものではありません:http://stackoverflow.com/questions/9393949/system-function-call-any-suggestions/9393989#comment11913469_9393989 – Ted

+0

私はかつて$ _SERERR ['argv'] 'それは数年間の積極的な投稿でPHPの一般的なリストに記載されています。 _常にユーザーsuperglobals_の考え方、私は主張することはできません。私の見解ではそれは非正統的なアプローチです。 – quickshiftin

答えて

2

getoptを探しているかもしれませんが、あなたの引数のフォーマットを多少変更するでしょう。

$ php opt.php --name=foo --operation=bar 
array(2) { 
    ["name"]=> 
    string(3) "foo" 
    ["operation"]=> 
    string(3) "bar" 
} 
1
$param = array(); 
foreach($_SERVER['argv'] as $value) { 
    if(substr_count($value, ':') !== 1) 
    continue; 
    $vals = explode(':', $value); 
    $param[$vals[0]] = $vals[1]; 
} 
1
$args = array(); 

$_args = array_slice($_SERVER['argv'], 1); 
foreach ($_args as $_arg) { 
    $arg = explode(':', $_arg); 

    if (count($arg) > 1) 
     $args[ $arg[0] ] = $arg[1]; 
    else 
     $args[] = $arg[0]; 
} 
2

PHP CLIの引数のための私の効用関数のような多くの人々:

<?php 
/** 
* parseArgs Command Line Interface (CLI) utility function. 
* @usage    $args = parseArgs($_SERVER['argv']); 
* @author    Patrick Fisher <[email protected]> 
* @source    https://github.com/pwfisher/CommandLine.php 
*/ 
function parseArgs($argv = null) { 
    $argv = $argv ? $argv : $_SERVER['argv']; array_shift($argv); $o = array(); 
    foreach ($argv as $a) { 
     if (substr($a, 0, 2) == '--') { $eq = strpos($a, '='); 
      if ($eq !== false) { $o[substr($a, 2, $eq - 2)] = substr($a, $eq + 1); } 
      else { $k = substr($a, 2); if (!isset($o[$k])) { $o[$k] = true; } } } 
     else if (substr($a, 0, 1) == '-') { 
      if (substr($a, 2, 1) == '=') { $o[substr($a, 1, 1)] = substr($a, 3); } 
      else { foreach (str_split(substr($a, 1)) as $k) { if (!isset($o[$k])) { $o[$k] = true; } } } } 
     else { $o[] = $a; } } 
    return $o; 
} 

何をあなたを行いますコマンドラインから

<?php 
var_dump(getopt('',array('name::','operation::'))); 
?> 

もっと求めてください。使用例とヘルパークラスの詳細は、https://github.com/pwfisher/CommandLine.phpを参照してください。

関連する問題