从函数参数合并默认数组

时间:2014-04-15 04:40:56

标签: php

我认为这是一个很长的镜头,但请考虑以下几点:

public function options(array $options = ['route' => '', 'placeholder' => '']) {}

我可以调用此方法,例如:

options(['route' => 'search'])

并将占位符维护为'placeholder' => ''

是否有任何可以将原始$options数组与新数组合并的内容?

2 个答案:

答案 0 :(得分:6)

您可以维护一组默认选项,然后将它们与提供的函数参数合并。

function options(array $options = []) 
{
    $defaults = ['route' => '', 'placeholder' => ''];
    $options = array_merge($defaults, $options);
    // ...
}

options(['route' => 'search']);

现在,以下所有方法都有效:

options(['route' => 'search']);
options(['route' => 'search', 'placeholder' => 1]);
options();

输出:

array(2) {
  ["route"]=>
  string(6) "search"
  ["placeholder"]=>
  string(0) ""
}

array(2) {
  ["route"]=>
  string(6) "search"
  ["placeholder"]=>
  int(1)
}

array(2) {
  ["route"]=>
  string(0) ""
  ["placeholder"]=>
  string(0) ""
}

答案 1 :(得分:0)

Amal Murali的答案也是正确的,但是,在array_merge()的位置,应该考虑使用array_merge_recursive(),以便调用函数时传递的选项不会覆盖默认选项。

例如:

function getQuiz(array $options) {

  $default = array(
      'conditions' => array(
      'deleted' => 0
    )
  );

 $options = array_merge_recursive(
   $default, 
   $options
  );

  print_r($options);
}

然后将其称为:

$options = array(
  'conditions' => array(
    'id'=>1
  )
);

getQuiz( $options );

在getQuiz()中执行print_r($ options)会给出:

array(
  conditions' => array(
    'id' => '3',
    'deleted' => 1
  )
)