PHP - 如何设置数组的每个索引的默认值[关闭]

Posted

技术标签:

【中文标题】PHP - 如何设置数组的每个索引的默认值[关闭]【英文标题】:PHP - How to set default value of every index of an array [closed] 【发布时间】:2014-07-25 10:43:13 【问题描述】:

我在处理数组时遇到了麻烦。如果我访问一个不存在的数组的索引,php 会抛出一个错误,并且每个索引都很难调节。有什么方法可以为数组的每个索引设置默认值,这样即使我访问了一个不存在的数组索引,它也会返回默认设置值?

【问题讨论】:

定义一个函数来访问你的数组,像这样:function access($array, $key) return isset($array[$key]) ? $array[$key]:'Default Value'; 并且只使用access($array, 'key') 而不是$array['key'] 这是 PHP 中的其中一件事。您需要习惯于检查是否存在可能丢失的密钥,因为没有语法可以避免它而不发出 E_NOTICE PHP default array values if key doesn't exist?的可能重复 什么是“每个”索引?您的意思是您可能想要访问的每个可能的索引,基本上是无限多个索引?还是您只有一些已定义的键?请指定更多上下文。 这个问题非常清楚。谁他妈把它关了? 【参考方案1】:

你确实想为数组的每个索引设置一个默认值,除非你的数组真的很小。这会浪费处理和内存。

你可以这样做:

if (isset($array[$index])) 
    $var = $array[$index]; // the index exists
 else 
    $var = 'default value'; // the index does not exist

// now so something with $var

【讨论】:

【参考方案2】:

'面向对象'方法:

您可以创建自己的ArrayAccess 实现,如果您要查找的键不存在,它会返回一个默认值(例如null)。最简单的方法是扩展现有的ArrayObject 类:

class MyArray extends ArrayObject 
    public function offsetGet($offset) 
        if(!$this->offsetExists($offset)) 
            return null; // or some default value
        
        return parent::offsetGet($offset);
    

然后用这个代替array()

$arr = new MyArray();
$arr['y'] = "I'm ok";
echo $arr['x']; // not set, default value (null) is returned.
echo $arr['y']; // prints "I'm ok"

程序方法:

您可以定义一个方法,该方法可以安全地从您的数组中获取值:

function safeGet($array, $key, $default = null)
    if(!is_array($array) && !$array instanceof ArrayAccess)
        throw new InvalidArgumentException('$array must be an array');
    
    return isset($array[$key]) ? $array[$key] : $default;

然后只需使用此方法访问您的值:

$arr = array();
$arr['z'] = "I'm ok";

echo safeGet($arr, 'x'); // tries to access $arr['x']. prints null by default.
echo safeGet($arr, 'y', 'default'); // tries to access $arr['y']. prints 'default'.
echo safeGet($arr, 'z'); // key exists, prints "I'm ok".

【讨论】:

以上是关于PHP - 如何设置数组的每个索引的默认值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

对于 np.array 中的每个元素,找到具有相同元素值的最大索引 [关闭]

php 数组索引值如何重新从0开始递增

在C#中使用默认值初始化字符串数组的3种方式

PHP通过值删除数组索引

(基础篇)数组的详解与使用

如何从 PHP 数组中取消设置数字索引元素?