我有两个对象和我们的finder函数的工作方式(我必须调用它两次... 1来获取配置键,值即非多语言的东西。第二次调用以获取多语言的东西)使它们看起来像这样:
[config] => Array
(
[cfg] => Config_Model Object
(
[id] => 2
[key] => system.default.main_color
[value] => #FF7C11
[deleted] => 0
)
[help] => Config_Model Object
(
[id] =>
[key] =>
[value] =>
[id_config] => 2
[name] => Hauptfarbe
[help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
[id_lang] => 1
)
)
我想将这两个对象合二为一。获取内容的代码如下所示:
public static function get($key)
{
$config['cfg'] = self::find(array('key' => $key), TRUE);
$config['help'] = self::findInTable(array(
'id_lang' => Language_Model::getDefaultLanguage(),
'id_config' => $config['cfg']->getId()
), self::dbTranslationTable, TRUE);
return $config;
// return (object) array_merge((array) $config['cfg'], (array) $config['help']);
}
你可以通过注释的return命令告诉我,我尝试使用array_merge()。问题是,[help]中的空属性覆盖[cfg]中的属性,因此它们再次为空:
[config] => stdClass Object
(
[id] =>
[key] =>
[value] =>
[deleted] => 0
[id_config] => 2
[name] => Hauptfarbe
[help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
[id_lang] => 1
)
它应该看起来像这样:
[config] => stdClass Object
(
[id] => 2
[key] => system.defalult.main_color
[value] => #FF7C11
[deleted] => 0
[id_config] => 2
[name] => Hauptfarbe
[help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
[id_lang] => 1
)
如果您需要更多信息,请告诉我们。
答案 0 :(得分:1)
您需要从第二个数组中过滤掉空值,然后仅将剩下的数据合并到第一个数组中。
最简单的解决方案是:
$config['help'] = array_filter((array) $config['help']);
return (object) array_merge((array) $config['cfg'], (array) $config['help']);
这使用array_filter()
的默认行为,它仅检查值是否计算为false
。这将删除空字符串,NULL值,甚至数字零。
更安全的解决方案实际上会检查空字符串,如下所示:
$config['help'] = array_filter((array) $config['help'], function($val) {
return (string) $val != '';
});
return (object) array_merge((array) $config['cfg'], (array) $config['help']);
答案 1 :(得分:0)
return (object) array_merge((array) $config['help'], (array) $config['cfg']);
和TA-DA!该阵列看起来就像我想要的那样。