如何安全地获取已定义和未定义索引的数组元素值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我厌倦了编写三元表达式来清理数据,例如:

$x = isset($array['idx']) ? $array['idx'] : null;
// and
$x = !empty($array['idx']) ? $array['idx'] : null;

有没有一种本地方式ZF访问器/过滤器来获取某些给定数组的数组元素值,而无需:

  • 禁用 error_reporting
  • 三元isset/ empty支票
  • 错误控制操作员 @
  • 创建我自己的全局函数或应用程序访问器/过滤器

就像是:

$x = get_if_set($array['idx']);
// or 
$x = Zend_XXX($array, 'idx')
提问于
用户回答回答于

至于你只需要NULL作为“默认”值,你可以使用错误抑制运算符:

$x = @$array['idx'];

批评:使用错误抑制运算符有一些缺点。首先它使用错误抑制运算符,因此如果代码的某部分有一些问题,则无法轻松恢复问题。此外,如果未定义,标准错误情况会污染寻找尖叫声。你的代码并不像表达自己那样精确。另一个潜在的问题是使用无效的索引值,例如为索引等注入对象。这会被忽视。

它会阻止警告。但是,如果您还想允许其他默认值,则可以通过ArrayAccess接口将访问权限封装到数组偏移量中:

class PigArray implements ArrayAccess
{
    private $array;
    private $default;

    public function __construct(array $array, $default = NULL)
    {
        $this->array   = $array;
        $this->default = $default;
    }

    public function offsetExists($offset)
    {
        return isset($this->array[$offset]);
    }

    public function offsetGet($offset)
    {
        return isset($this->array[$offset]) 
            ? $this->array[$offset] 
            : $this->default
            ;
    }

    public function offsetSet($offset, $value)
    {
        $this->array[$offset] = $value;
    }

    public function offsetUnset($offset)
    {
        unset($this->array[$offset]);
    }
}

用法:

$array = array_fill_keys(range('A', 'C'), 'value');
$array = new PigArray($array, 'default');
$a     = $array['A'];   # string(13) "value"
$idx   = $array['IDX']; # NULL "default"

var_dump($a, $idx);

演示:https//eval.in/80896

用户回答回答于

所属标签

可能回答问题的人

  • EatRice

    16 粉丝0 提问138 回答
  • 富有想象力的人

    5 粉丝0 提问344 回答
  • 最爱开车啦

    9 粉丝503 提问1.6K 回答
  • 成都加米谷大数据

    5 粉丝0 提问8 回答

扫码关注云+社区

领取腾讯云代金券