Задать вопрос
@frmax
человек

Как сравнить 2 неодинаковых объекта или массива Yii2?

Доброй ночи, чуток поздно) и я что-то не соображу, как это сделать.

Значит получил я с помощью hasMany два объекта user и friends.
Мне надо узнать какие id пересекаются с первым объектом и присвоить новый элемент массива, чтоб вывести что эти парни уже дружат. Но при этом мне надо все элементы массива с которым сравниваю чтоб их вывести.

Если нужно могу вар_дамп двух этих объектов, надо?
Подскажи как лучше сделать? Может лучше в вьюхе?
  • Вопрос задан
  • 1034 просмотра
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@Akellacom
CTO
Я ничего не смог понять из вашего вопроса, но думаю вам должна помочь функция array_diff
php.net/manual/ru/function.array-diff.php
Ответ написан
Комментировать
@frmax Автор вопроса
человек
Смотрите у меня два объекта.

К примеру, объекты(выберу массивами):
1
array(3) { 
[0]=> array(1) { 
[0]=> array(2) { 
        ["id"]=> string(1) "2" 
        ["username"]=> string(4) "ivan" } } 
[1]=> array(1) { [0]=> array(2) { 
       ["id"]=> string(1) "3" 
      ["username"]=> string(8) "Саша" } } 
[2]=> array(1) { [0]=> array(2) { 
        ["id"]=> string(2) "19" 
        ["username"]=> string(8) "Макс" } } }


2
array(2) { 
[0]=> array(1) { [0]=> array(2) { 
          ["id"]=> string(1) "1" 
          ["username"]=> string(5) "maxim" } } 
[1]=> array(1) { [0]=> array(2) { 
          ["id"]=> string(2) "19" 
          ["username"]=> string(8) "Макс" } } }


Как видим пересекается вот этот id 19 / [0]=> array(2) { ["id"]=> string(2) "19" ["username"]=> string(8) "Макс" } }
Т.е. в итоге получаем 3 массив
array(2) { [0]=> array(1) { [0]=> array(2) { 
          ["id"]=> string(1) "1" 
          ["username"]=> string(5) "maxim" } } 
[1]=> array(1) { [0]=> array(2) { <b>
         ["id"]=> string(2) "19" 
         ["username"]=> string(8) "Макс", 
         ['friend']=>1</b>} } }
Ответ написан
Комментировать
@LAV45
$users = User::find()
    ->indexBy('id')
    ->all();

$friends = Friend::find()
    ->indexBy('id')
    ->all();

$result = array_intersect_key($users, $friends);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы