2013-03-10 69 views
0

我有一個產品導入代碼,用於將庫存(數量)分配給倉庫位置(stock_id)的Magento。信息傳遞給一個數組,但是我對數組的工作知識並不是Flash,所以我確信我沒有正確地做到這一點。PHP數組 - 如何在數組中使用多個變量

導入目前是這樣完成的,但我確定它不是最高效的,因爲我將產品保存兩次。

這將爲位置1(stock_id 1)分配一個100的數量,保存產品,然後將200的數量分配給位置2(stock_id 2),然後再次保存產品。

$stocksData = $product->getStocksData(); 
     if (!$stockData) { 
      $stockData = array(); 
     } 
     $stockData['stock_id'] = 1; 
     $stockData['qty'] = 100; 
     $stocksData[$stockId] = $stockData; 
     $product->setStocksData($stocksData); 

     $product->setCreatedAt(strtotime('now')); 
     try { 
      $product->save(); 
      echo "Successful"; 
     } 
     catch (Exception $ex) { 
      echo 'There was an error :<br/>' .$ex; 
     } 

    $stocksData = $product->getStocksData(); 
      if (!$stockData) { 
       $stockData = array(); 
      } 
      $stockData['stock_id'] = 2; 
      $stockData['qty'] = 200; 
      $stocksData[$stockId] = $stockData; 
      $product->setStocksData($stocksData); 


$product->setCreatedAt(strtotime('now')); 
try { 
    $product->save(); 
    echo "Successful"; 
} 
catch (Exception $ex) { 
    echo 'There was an error :<br/>' .$ex; 
} 

我試圖做到的,是將所有的數組中的值,並保存一次,因爲這會佔用大量的負荷過劇本。

我一直在用這樣的東西玩耍,但沒有得到任何地方,通常有錯誤的結束:

 $stocksData = $product->getStocksData(); 
       if (!$stockData) { 
        $stockData = array(); 
       } 
       $stockData = array(
[$stockData['stock_id'] = 1] => $stockData['qty'] = 100, 
[$stockData['stock_id'] = 2] => $stockData['qty'] = 200 
); 
       $stocksData[$stockId] = $stockData; 
       $product->setStocksData($stocksData); 

我假設它可能有所有這些信息在一個陣列但我不知道如何。

回答

1

有很多方法來在PHP中初始化一個數組。

$stocksData = array(
    'key' => 'value', 
    'myarr' => array(
    'nested' => 'array', 
    1, 
), 
    'id_copy' => $stocksData['id'], 
    'qty' => $stocksData['stock_id'] == 1 ? 100 : 200, 
); 

有關數組語法的完整說明,請查看php的Array documentation。另請注意我對ternary operator的使用。你可以說像避開使用此語法:

if ($stocksData['id'] == 1) { 
    $stocksData['qty'] = 100; 
} 
else { 
    $stocksData['qty'] = 200; 
} 

編輯:

對於合併請求的具體使用情況,看看下面:

$stocksData = $product->getStocksData(); 
$stocksData[1] = array(
    'stock_id' => 1, 
    'qty' => 100, 
); 
$stocksData[2] = array(
    'stock_id' => 2, 
    'qty' => 200, 
); 
$product->setStocksData($stocksData); 
+0

感謝Aiias ,但是我並沒有真正遵循你的答案。他們是兩個單獨的解決方案還是一起工作?在第二個,假設我有4個股票的ID - 我最終會以if,else if,else if,else結束。在第一個答案id_copy來自哪裏。 – James 2013-03-10 23:49:57

+1

@James - 我只是列舉了一些使用數組語法的不同方法。檢查我編輯的答案,看看是否適合你。 – Aiias 2013-03-10 23:51:19

+0

非常感謝!這工作完美。你救了我幾個小時的悲傷。 – James 2013-03-11 00:08:32