Объединить данные объекта из двух массивов объектов на основе значений столбца общего идентификатора. ⇐ Php

Кемеровские программисты php общаются здесь
Anonymous
Объединить данные объекта из двух массивов объектов на основе значений столбца общего идентификатора.

Сообщение Anonymous »

Либо я слепой, либо не могу найти эту проблему нигде на 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
)

)
And $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
)

)
Что я пробовал?

Я пробовал несколько функций слияния (

Код: Выделить всё

array_merge()
и array_merge_recursive()) PHP, ближайшим результатом, который я получил, было то, что второй массив (

Код: Выделить всё

['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);
}
Похоже, что array_merge() в команде возврата вообще ничего не делает, поэтому я, вероятно, неправильно собираю данные или что-то напутал с Массивы (забыл добавить [], или не знаю...). Мне здесь не хватает леса из-за деревьев.

Есть предложения, в каком направлении я мог бы пойти?

< strong>Изменить: С помощью кода, предоставленного Пе де Леао, я смог решить проблему. Моя функция теперь выглядит так:

Код: Выделить всё

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;
}
И результат именно такой, как я хотел!

Подробнее здесь: https://stackoverflow.com/questions/178 ... umn-values

Вернуться в «Php»