2013-03-10 70 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