php - 如果数组中存在键,则设置var的函数,否则设置为default

时间:2010-08-11 23:35:17

标签: php

所以我有一个类,我想让它只是设置默认值,如果它们没有被传入。例如,我可以传递一个名为$ options的数组。

function new_score($options)
{

}

然后我想要一个不同的函数,如果$ options数组中不存在具有该var名称的键,我可以将var设置为默认值;

函数定义可能如下所示:

function _set(&$key, $options, $default)
{
}

我知道有array_key_exists(),我想我正在寻找一种方法来访问变量名。

例如:

$apple = 'orange';

如何获取字符串'apple',以便我可以找到该键?我知道我可以使用函数_set()并让它查找$ key,$ var,$ options和$ default,但我宁愿进一步抽象它。

3 个答案:

答案 0 :(得分:3)

有两种方法可以做到这一点:

使用三元运算符一次一个:

$key = isset($array['foo']) ? $array['foo'] : 'default';

或者,作为一个整体的数组:

$defaults = array('foo' => 'bar', 'other' => 'default value');
$array = $array + $defaults;

答案 1 :(得分:3)

function method($options)
{
  //First, set an array of defaults:
  $defaults = array( "something" => "default value",
                     "something_else" => "another default");

  //Second, merge the defaults with the $options received:
  $options = array_merge($defaults, $options);

  //Now you have an array with the received values or defaults if value not received.
  echo($options["something"]);

  //If you wish, you can import variables into local scope with "extract()"
  //but it's better not to do this...
  extract($options);
  echo($something);
}

参考文献:

http://ar.php.net/manual/en/function.array-merge.php

http://ar.php.net/manual/en/function.extract.php

答案 2 :(得分:1)

这个怎么样:

class Configurable
{
 private static $defaults = array (
  'propertyOne'=>'defaultOne',
  'propertyTwo'=>'defaultTwo'
 );

 private $options;

 public function __construct ($options)
 {
  $this->options = array_merge (self::$defaults, $options);
 } 
}

来自the documentation for array_merge

  

如果输入数组相同   字符串键,然后是后面的值   该密钥将覆盖以前的密钥   一。