背景
可変引数を利用したくなりました。
具体的には、インスタンス変数 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