Присвоение одной переменной с массивом к другой.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
MrGrock
Сообщения: 3
Зарегистрирован: 2018.04.30, 14:36

Присвоение одной переменной с массивом к другой.

Сообщение MrGrock »

Здравствуйте! Подскажите пожалуйста как правильно присвоить значение из бд($products) к другой($property) и чтобы значения в $products где есть в 2-ух столбцах одинаковые значения не повторялись в конечном результате.

Пример:

$products первый параметр фабрика_ид + второй параметр должен добавиться из $property(размер)

и потом это отсортировать все на повторы и удалить их.

Как я пытался:

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

$fabrics = Fabric::find()->asArray()->all();
        $products = Product::find()->asArray()->orderBy(['fabric_id'=>SORT_ASC])->all();
        foreach ($products as $product):
            $property = Property::find()->asArray()->where(['product_id' => $product['id']])->all();
            $products=array_merge($product,$property);
        endforeach;
Но у меня не получилось , я и другие варианты пробовал , этот был последним.
MrGrock
Сообщения: 3
Зарегистрирован: 2018.04.30, 14:36

Re: Присвоение одной переменной с массивом к другой.

Сообщение MrGrock »

Я как понял array_filter фильтрует , а как присвоить к каждому $products свой $property , пытаюсь через hasMany/hasOne не получается
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Присвоение одной переменной с массивом к другой.

Сообщение Loveorigami »

И какой ответ Вы ждете?

Чтобы сравнивать (фильтровать), нужно иметь два структурно одинаковых массива. Изучите примеры по array_filter и array_diff.

По коду, у вас уже здесь, помягче так сказать, ошибка

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

        
        foreach ($products as $product):
            $property = Property::find()->asArray()->where(['product_id' => $product['id']])->all();
            $products=array_merge($product,$property);
        endforeach;
var_dump или print_r, я смотрю, вы не используете в отладке...
MrGrock
Сообщения: 3
Зарегистрирован: 2018.04.30, 14:36

Re: Присвоение одной переменной с массивом к другой.

Сообщение MrGrock »

Дружище , я понимаю что ты ветеран в программировании и в php в целом , я понимаю что ты их видишь и понимаешь , но от того что ты мне сказал что у меня ошибка в коде , это же не значит что я ее увидел и сразу понял почему это ошибка:)
var_dump я пользуюсь и задал вопрос потому что у меня фигня выходит:)

В общем я заменил эту канитель на:

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

    for ($i=0; $i<=count($products)-1; $i++){
        $property = Property::find()->asArray()->where(['product_id' => $products[$i]['id']])->all();
        $promez = array_merge($products[$i] , $property);
        $products[$i]= $promez;
    };
   
   //выводит
//           array(11) {
//        ["id"]=>
//  string(1) "1"
//        ["name"]=>
//  string(9) "Product 1"
//        ["cod"]=>
//  string(4) "1234"
//        ["description"]=>
//  string(18) "It is text product"
//        ["price"]=>
//  string(3) "500"
//        ["fabric_id"]=>
//  string(1) "1"
//        ["collection_id"]=>
//  string(1) "1"
//        ["status"]=>
//  string(1) "1"
//        ["sale"]=>
//  string(1) "0"
//        ["datetime"]=>
//  NULL
//  [0]=> // Это пытаюсь убрать , не получается.
//  array(4) {
//            ["id"]=>
//    string(1) "1"
//            ["product_id"]=>
//    string(1) "1"
//            ["options_id"]=>
//    string(1) "1"
//            ["property"]=>
//    string(5) "40*40"
//  }
//}
Я ваш пример посмотрел , это уже идет фильтрация , мне нужно сначала объеденить два массива а потом фильтровать(я уже вроде это говорил)
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Присвоение одной переменной с массивом к другой.

Сообщение Loveorigami »

Для начала я тебе дал возможность самому найти и подсказал, с помощью чего искать. Если "фигня выходит", значит надо подумать, почему?

Ошибку я увидел не в твоих массивах, т.к. я понятия не имею, что в них, а в КОДЕ.
Во втором листинге та же самая ошибка...

Еще один наводящий пример.
-----------------------------------
foreach ($products as $product):
$property = Property::find()->asArray()->where(['product_id' => $product['id']])->all();
$products=array_merge($product,$property);
endforeach;
-----------------------------------
И?
Ответить