我正在尝试建立一个结构,其中关联数组包含我的模板的键/值数据。
我希望能够应用默认数据,但下面的代码有一些明显的问题。首先,这是一个麻烦的写作重复的东西。第二 - 如果根本没有定义键,则null的测试不起作用,那么你只是得到一个错误,说明没有定义键'background_color'。
我最好如何构建这样的结构?
//Defaults for this template
$default = array();
$default['background_color'] = '#ffffff';
$default['background_image'] = '';
$default['background_opacity'] = '1.0';
$default['background_repeat'] = '';
$default['background_position-horizontal'] = 'left';
$default['background_position-vertical'] = 'top';
$default['background_size'] = '';
if($data['background_color'] == null) { $data['background_color'] = $default['background_color']; }
if($data['background_image'] == null) { $data['background_image'] = $default['background_image']; }
if($data['background_opacity'] == null) { $data['background_opacity'] = $default['background_opacity']; }
if($data['background_repeat'] == null) { $data['background_repeat'] = $default['background_repeat']; }
if($data['background_position-horizontal'] == null) { $data['background_position-horizontal'] = $default['background_position-horizontal']; }
if($data['background_position-vertical'] == null) { $data['background_position-vertical'] = $default['background_position-vertical']; }
if($data['background_size'] == null) { $data['background_size'] = $default['background_size']; }
答案 0 :(得分:1)
//Defaults for this template
$default = array();
$default['background_color'] = '#ffffff';
$default['background_image'] = '';
$default['background_opacity'] = '1.0';
$default['background_repeat'] = '';
$default['background_position-horizontal'] = 'left';
$default['background_position-vertical'] = 'top';
$default['background_size'] = '';
foreach ($default as $k => $v) {
if (!isset($data[$k])) {
$data[$k] = $default[$k];
}
}
答案 1 :(得分:1)
使用isset,并使用foreach
遍历默认值foreach ($default as $key => $val) {
if (!isset($data[$key]) {
$data[$key] = $val;
}
}
如果值为null,则Isset返回false,因此您不需要额外检查null。
答案 2 :(得分:0)
我总是采用'默认'方案的方式是:
$data = (array)$data + (array)$default;