我在处理数组时遇到问题。如果我访问一个不存在的数组的索引,PHP会抛出一个错误,并且每个索引的调整都很困难。有没有什么方法可以为数组的每个索引设置默认值,所以即使我访问一个不存在的数组索引然后它返回默认的设置值?
答案 0 :(得分: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
答案 1 :(得分:0)
'面向对象'方法:
如果您要查找的密钥不存在,您可以创建自己的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".