要么我是盲人,要么我在 SO 的任何地方都找不到这个问题。昨天我在合并数组时遇到了问题,我可以在 SO 的帮助下解决这个问题。今天我又遇到了合并数组的问题,但这次是多维数组。
我有一个数组$usergroup['groups']
和一个数组$usergroup['lang']
$usergroup['groups']
看起来像这样:
Array
(
[0] => Usergroup_Model Object
(
[id] => 1
[deleted] => 0
)
[1] => Usergroup_Model Object
(
[id] => 2
[deleted] => 0
)
[2] => Usergroup_Model Object
(
[id] => 3
[deleted] => 0
)
)
$usergroup['lang']
看起来像这样:
Array
(
[0] => Usergroup_Model Object
(
[id] =>
[id_usergroup] => 1
[name] => Administratoren
[id_lang] => 1
)
[1] => Usergroup_Model Object
(
[id] =>
[id_usergroup] => 2
[name] => Benutzer
[id_lang] => 1
)
[2] => Usergroup_Model Object
(
[id] =>
[id_usergroup] => 3
[name] => Gäste
[id_lang] => 1
)
)
我希望我的合并数组看起来像这样:
Array
(
[0] => Usergroup_Model Object
(
[id] => 1
[id_usergroup] => 1
[name] => Administratoren
[id_lang] => 1
[deleted] => 0
)
[1] => Usergroup_Model Object
(
[id] => 2
[id_usergroup] => 2
[name] => Benutzer
[id_lang] => 1
[deleted] => 0
)
[2] => Usergroup_Model Object
(
[id] => 3
[id_usergroup] => 3
[name] => Gäste
[id_lang] => 1
[deleted] => 0
)
)
我已经尝试了几个 PHP 的合并函数 (array_merge()
和array_merge_recursive()
),我得到的最接近的结果是,第二个数组 ( ['lang']
) 覆盖了第一个数组 ( ['groups']
)。为了解决这个问题,我尝试删除lang
Array 上的空值(始终为id
)。但这并不能解决问题。代码 - 目前 - 看起来像这样:
public static function getAll()
{
$usergroup['groups'] = self::find();
$usergroup['lang'] = self::findInTable(array(
'id_lang' => Language_Model::getDefaultLanguage()
), self::dbTranslationTable);
foreach ($usergroup as $ug) {
$ug = array_filter($ug, function($val) {
return $val != '';
});
}
return array_merge($ug);
}
return 命令上的 array_merge() 似乎根本没有做任何事情,所以我可能没有正确收集数据,或者我把数组弄乱了(忘记添加 [],或者我不知道。 ..)。我有点想念这里的树木的森林。
有什么建议我可以往哪个方向走吗?
编辑:使用 Pé de Leão 提供的代码,我能够解决问题。我的函数现在看起来像这样:
public static function getAll()
{
$usergroup['groups'] = self::find();
$usergroup['lang'] = self::findInTable(array(
'id_lang' => Language_Model::getDefaultLanguage()
), self::dbTranslationTable);
$out = array();
foreach ($usergroup['groups'] as $key => $value) {
$out[] = (object) array_merge((array) $usergroup['lang'][$key], (array) $value);
}
return $out;
}
结果正是我想要的!