Объединить данные объекта из двух массивов объектов на основе значений столбца общего идентификатора.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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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