【发布时间】:2013-07-25 06:12:23
【问题描述】:
要么我是盲人,要么我在 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 数组(始终为 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;
}
结果正是我想要的!
【问题讨论】:
-
使用
array_merge_recursive- php.net/manual/en/function.array-merge-recursive.php -
我做了,但结果是一样的。
lang覆盖groups -
如果你有 sum 数组,试试这个
$resultArray = $usergroup['groups'] + $usergroup['lang'] -
我该如何理解这一点?我刚刚尝试了
return $usergroup['groups'] + $usergroup['lang'],现在lang数组完全丢失了。 -
也许这会有所帮助:kohanaframework.org/3.3/guide-api/Arr#merge 这取决于可以在同一页面上找到的 Arr::is_assoc。
标签: php arrays multidimensional-array