Как правильно перебрать массив и записать данные?

Ребят доброго утра Всем. Такой вопрос Принимаю склады и товары через input stringом пример(склад 1,склад 2,склад 3), Делаю explode, перебираю через foreach, затем к этим складам добавляю продукты. Такой вопрос если склад уже существует то как мне продукты добавить уже на существующий склад, а не добавлять дубликат склада и вешать на него товары? Сразу прошу прощение за табуляцию кода, писал его прям тут в редакторе. =) Спасибо за помощь

$sklads = 'склад 1, склад 2';
$skladsArr = explode(',', $sklads );

$products = 'product 1, product 2';
$productsArr = explode(',', $products );

foreach($sklads as $sklad){
$Sklad = new Sklad()
$Sklad ->name = $sklad;
$Sklad ->save()}
foreach($products as $product){
$Product= new Product();

$Product->sklad_id = $Sklad->id;
$Product->name = $product;
$Product->save()
}

Ответы (1 шт):

Автор решения: phpBear

При условии, что массивы складов и товаров у Вас не будут огромными, я бы предложил такое решение.

$sklads = 'склад 1, склад 2';
$skladsArr = explode(',', $sklads );

$products = 'product 1, product 2';
$productsArr = explode(',', $products );

//Заводим еще один массив
$skladsAndProductsArr = [];

foreach( $skladsArr as $sklad ) {
 foreach( $productsArr as $product ) {
      //В котором ключом будет название склада, а значением массив с товарами этого склада ["склад 1"] => ["product1", "product2"]
      $skladsAndProductsArr[trim($sklad)][] = trim($product);
  }   
}

//Проходим этот массив
foreach( $outArray as $sklad => $products ) {
    //На каждый его элемент-ключ заводим ОДИН раз объект Sklad
    $Sklad = new Sklad()
    $Sklad ->name = $sklad;
    $Sklad ->save();
    //Проходим массив товаров
    foreach( $products as $product ) {
        //Сохраняем каждый товар в склад созданный в родительском цикле
        $Product= new Product();
        $Product->sklad_id = $Sklad->id;
        $Product->name = $product;
        $Product->save()
    }
}
→ Ссылка