Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Правильный код, как исправить грабли. (https://javascript.ru/forum/server/45637-pravilnyjj-kod-kak-ispravit-grabli.html)

Duda.Ml1986@gmail.com 09.03.2014 13:03

Правильный код, как исправить грабли.
 
Всем привет.

Коротко что это делает.
Есть апи которая присылает данные, я хочу их вставить в БД, но что бы избежать дублирования сделал одно поле уникальным в таблице. То что вы видите костыль, а как сделать лучше не знаю, как избавится от форичей?

Суть вопроса как сравнить два массива так что бы остался один с теми записями у которых ай ди не совпадает ни с одной записью ай ди во втором массиве

Есть вот такой фрагмента кода:

$inventoryId = 436;
                    $this->Model('M_Soap');
                    $M_Soap = new Soap();

Возвращает многомерный массив

                    $arrProducts = $M_Soap->getInventoryProducts($inventoryId);

Беру все ай ди из того что пришло

                    foreach ($arrProducts as $product) {
                        $arr[] = $product['id'];
                    }

Делаю селект в БД всех записей если они есть под таким ай ди

                    $productsInDb = $M_Product->getUniqueRecords($arr);

Сравниваю то что пришло и то что хранится в БД, если есть совпадение то удаляю из того что пришло по ай ди

                    foreach ($arrProducts as $product) {
                        foreach ($productsInDb as $productDb){
                            if ($product['id'] = $productDb['id_supplier']){
                                unset($arrProducts[$product['id']]);
                            }
                        }
                    }

Вставляю в БД, если вдруг совпадет по ай ди с тем что есть в БД то вставить неполучится (ун индекс на поле)

                    $M_Product->addInventoryById($arrProducts);

Ruslan1802 10.03.2014 23:43

Если я вас правильно понял, то array search в помощь


Часовой пояс GMT +3, время: 20:09.