sohotcall

argvParser, PHP getopt Alternative

Dec 21st, 2021
1,016
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 0.94 KB | None | 0 0
  1. <?php
  2. if ( ! class_exists( "Fun" ) ){ class Fun {
  3. function argvParser( $argv, $fnr = array(), $key = "" ){
  4.     $params = array();
  5.     foreach ( $argv as $v ){
  6.         $eq = false;
  7.         if ( preg_match( "/^--([a-z0-9A-Z\-_]*)(\[\])?(\=)?(.*)/", $v, $m ) ){
  8.             $key = $m[2].$m[1];
  9.             $v = $m[4];
  10.             $eq = $m[3];
  11.         } elseif ( preg_match( "/^-([a-z0-9A-Z\-_])/", $v, $m ) ){
  12.             $key = @$fnr[ $m[1] ] ?: $m[0];
  13.         }
  14.         if ( @$key ){
  15.             if ( substr( $key, 0, 2 ) == "[]" ){
  16.                 $baseKey = substr( $key, 2 );
  17.                 if ( ! isset( $param[ $baseKey ] ) && ! $eq )
  18.                     $params[ $baseKey ] = array();
  19.                 else
  20.                     $params[ $baseKey ][] = $v;
  21.             } else
  22.                 $params[ $key ] = $v;
  23.         } else
  24.             $params[] = $v;
  25.     }
  26.     return $params;
  27. }
  28. } }
  29. /*
  30. Usage
  31. $ test.php --var aaa --var2=bbb --var3 --arr[] ccc ddd -f eee
  32. <?php
  33. Fun::argvParser( $argv, ['f'=>"var4"] );
  34. return [0=>"test.php", 'var'=>"aaa", 'var2'=>"bbb", 'var3'=>"", 'arr'=>[0=>"ccc", 1=>"ddd"], 'var4'=>"eee"]
  35. */
Advertisement
Add Comment
Please, Sign In to add comment