LoginSignup
1
1

More than 5 years have passed since last update.

[PHP] 可変引数を使う場合

Posted at

背景

可変引数を利用したくなりました。
具体的には、インスタンス変数 arrが多次元配列で arr['key1']['key2']['key3']['key4'] ... となっており、
状況によって、$arr['key1']を取り出したり、$arr['key1']['key2']['key3']を取り出すような関数がほしくなりました。
そこで、第1引数に'key1'を指定した場合には、$arr['key1']を返し、第1引数〜第3引数にそれぞれ 'key1', 'key2', 'key3'を指定したら$arr['key1']['key2']['key3']を返すような関数を可変引数によって実現したいと考えました。

可変引数を実現するためには

以下のように func_get_args()で引数の配列を取得できる。


function getArguments(){
  $args = func_get_args();

  foreach($args as $arg){
    echo $arg;
  }
}

可変引数を利用して、多次元配列のn次元目の要素を取り出す関数


class Sample{
  $private $arr = [
   'a' => ['aa' => ['aaa' => ['aaaa' => 'aaaaa']]]
   'b' => ['bb' => ['bbb' => ['bbbb' => 'bbbbb']]]
   'c' => ['cc' => ['ccc' => ['cccc' => 'ccccc']]]
   'd' => ['dd' => ['ddd' => ['dddd' => 'ddddd']]]
  ];

  public function getArrElement(){

    $args = func_get_args();
    $tmp  = $this->arr;

    foreach($args as $arg) $tmp = $tmp[$arg];

    return $tmp;
  }
}

$obj = new Sample();
var_dump($obj->getArrElement('a'))           # ['aa' => ['aaa' => ['aaaa' => 'aaaaa']]]
var_dump($obj->getArrElement('b','bb')       # ['bbb' => ['bbbb' => 'bbbbb']]
var_dump($obj->getArrElement('c','cc','ccc') # ['cccc'=> 'ccccc']
var_dump($obj->getArrElement('d','dd','ddd','dddd') # ddddd 
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1