2014-01-27 68 views
0

任何想法是怎麼回事,該陣列應該像這樣:問題產生陣列

Array (
    [69] => Array (
     [KR] => 1 
    ) 
    [70] => Array (
     [KR] => 2 
    ) 
    [70] => Array (
     [LR] => 1 
    ) 
    [71] => Array (
     [LR] => 1 
    ) 
) 

這裏是我的代碼:

foreach ($_POST as $key => $value) { 
    //Split the ID and Product into individual variable 
    $tmp = explode("_",$key); 
    $id = $tmp[0]; $product = $tmp[1]; 

    //Generate array's for each sale 
    $sales[$id] = array($product => $value); 
} 
print_r($sales); 

這裏是它產生的結果是:

Array (
    [69] => Array (
     [KR] => 1 
    ) 
    [70] => Array (
     [LR] => 1 
    ) 
    [71] => Array (
     [LR] => 1 
    ) 
) 

下面是一個快速表,所以你可以看到變量的實際集合

69_KR 1 
70_KR 2 
70_LR 1 
71_LR 1 
+1

對鍵70的第二次賦值將覆蓋第一個值。 – Shazbot

+0

我認爲它只是附加到它,我怎麼能做到這一點? –

+0

附加到數組的語法是使用空方括號,請參閱下面的我的建議答案。 –

回答

1

如果同樣的銷售ID可以多次出現,那麼你不應該使用它作爲一個數組的關鍵。第二次銷售ID爲70時,它會覆蓋第一個的值。

有你可以改變這個方法很多,這裏有一個建議:

foreach循環之前,創建空數組$sales = array();(你可能已經這樣做了)

如果你不這樣做介意關聯數組(IMO他們使代碼更易讀/維護 - 想想別人改變你的代碼在5年做$銷售陣列上的var_dump),那就試試這個,而不是在foreach內:

$sales[] = array("sales_id" => $id, "product" => $product, "value" => $value);

稍後您將不得不稍後處理數組,但print_r或var_dump的確很容易閱讀。 (我也想換的print_r在一個<pre>標籤的非常好的陣列輸出到瀏覽器的時候格式化。)

1

更換

$sales[$id] = array($product => $value); 

$sales[$id][$product] = $value; 
1

$sales[$id] = array($product => $value); 

你重挫$銷售[$ ID]的早期版本。你正在丟失數據。

您需要另一個數據結構來存儲返回的值。像一個列表。這看起來像

銷售=每個銷售清單。 然後訪問列表長度的每個銷售迭代。