这是:
$result = $this->getSomething();
$db = new Db();
$db->save($result['DATA']); // might exists or not
$db->save($result['IP']); // might exists or not
$db->save($result['X']); // might exists or not
但这些数组键不确定是否存在。我总是可以写下这个:
$result = $this->getSomething();
if (!isset($result['DATA']))
{
$result['DATA'] = null;
}
//same for the other keys
$db = new Db();
$db->save($result['DATA']);
$db->save($result['IP']);
$db->save($result['X']);
但这是非常繁琐的工作。有什么方法可以简化这个吗?
答案 0 :(得分:5)
从PHP 7开始(无论如何都应该开始使用),您可以使用新的coalesce运算符来执行此操作:
$db->save($result['DATA'] ?? null);
答案 1 :(得分:2)
$result = $this->getSomething();
$result += array_fill_keys(['DATA', 'IP', 'X'], null);
这会填充null
不存在的任何密钥
甚至可以写成$result = $this->getSomething() + array_fill_keys(..);
。
答案 2 :(得分:1)
你可以这样做:
$data = !isset($result['DATA']) ? null : $result['Data'];
$ip = !isset($result['IP']) ? null : $result['IP'];
etc...
答案 3 :(得分:1)
如果您使用OOP方式
会更好你的方法getSomething()必须返回某个类的实例(例如SomeData)而不是数组
/**
* @return SomeData
*/
public function getSomething()
{
/*
* some code
*/
return new SomeData($data, $x, $ip);
}
SomeData类
class SomeData
{
private $data;
private $ip;
private $x;
public function __construct($data, $ip, $x)
{
$this->data = $data;
$this->ip = $ip;
$this->x = $x;
}
/**
* @return mixed
*/
public function getData()
{
return $this->data;
}
/**
* @param mixed $data
*/
public function setData($data)
{
$this->data = $data;
}
/**
* @return mixed
*/
public function getIp()
{
return $this->ip;
}
/**
* @param mixed $ip
*/
public function setIp($ip)
{
$this->ip = $ip;
}
/**
* @return mixed
*/
public function getX()
{
return $this->x;
}
/**
* @param mixed $x
*/
public function setX($x)
{
$this->x = $x;
}
}
最后,你不用担心isset等就可以使用结果。
$result = $this->getSomething();
$db = new Db();
$db->save($result->getData());
$db->save($result->getIp());
$db->save($result->getX());