私は目が見えないか、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()
および) を試しましたが、得られた最も近い結果は、2 番目の配列 ( ) が最初の配列 ( ) を上書きしたというものでした。これを修正するために、配列の空の値を削除しようとしました(これは常にです)。しかし、それはそれを修正しません。現時点でのコードは次のようになります。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;
}
そして、結果はまさに私が望んでいた方法です!