2011-12-08 66 views
0

我似乎無法繞過這個包裹我的頭。如何使用數量/價格數據在PHP中正確轉換數組?

我給出PHP陣列看起來像這樣:

array (
    0 => array (
     0 => 50, 
     1 => 0.80 
    ), 
    1 => array (
     0 => 300, 
     1 => 0.50 
    ), 
    2 => array (
     0 => 600, 
     1 => 0.30 
    ), 
    3 => array (
     0 => 1000, 
     1 => 0.20 
    ), 
    4 => array (
     0 => 4000, 
     1 => 0.10 
    ) 
); 

數組的數組,其中內陣列的第一索引表示的量,而第二索引表示的價格。

我想將這些數據導入到我的數據庫中,但是以特定的方式。

我有具體的數量,我想保持的軌道,由下面的數組定義:

array(10,100,500,1000,5000,10000); 

然後我想使原來的陣列更微調,以數量和價格,我想看到。因此,在這個特殊的例子,我想一個數組,看起來像這樣:

array (
    0 => array (
     0 => 100, 
     1 => 0.80 
    ), 
    1 => array (
     0 => 500, 
     1 => 0.50 
    ), 
    2 => array (
     0 => 1000, 
     1 => 0.20 
    ), 
    3 => array (
     0 => 5000, 
     1 => 0.10 
    ) 
); 

我的新陣列將僅包含具體的數量指標。 如果原始數組中存在數量,我使用該價格。如果它不存在,我會使用下一個最低數量的價格。如果不存在更低的數量,我不希望在新數組中看到該數量。

我已經能夠做到我想要什麼用下面的代碼大部分:

function getRelativePrices($pricearray) { 
    $relativeprices = array(); 
    $types = array(10,100,500,1000,5000,10000); 
    foreach ($types as $q) { 
     $new_array = array(); 
     foreach ($pricearray as $index => $array) { 
      if ($q >= $array[0]) { 
       $new_array = array($q, $array[1]); 
      } 
     } 
     if (sizeof($new_array)) { 
      $relativeprices[] = $new_array; 
     } 
    } 
    return $relativeprices; 
} 

上述唯一的問題是,我得到的是我不想要的額外數據。

4 => array (
    0 => 10000, 
    1 => 0.10 
) 

我不希望這最後一塊,因爲我覺得它多餘的考慮,我知道,5000件的成本:在我提供的例子,我在那個樣子年底獲得一個第五指數/陣列每個0.10美元,所以我可以假設,當「4000」是原始數組中給出的最高數量時,10000將花費相同的價格。

所以我想請求幫助刪除這最後一塊。 另外,我想知道是否有人有更好的編碼方法來轉換這個數組。

+0

您應該將陣列更改爲'陣列( 0 =>數組( '量'=> 50, '價格'=> 0.80 )' 所以它更容易看到,但這真的取決於你 – nine7ySix

+0

好吧,我使用REST調用,它給了我這種格式的數組。因爲我想顯示原始數組和重新格式化的HTML表格,所以我可能不會更改重新格式化數組的結構。但是,是的,我通常喜歡在可以的時候使用鑰匙。 – Justin

+0

我想你需要遍歷給定的數組,然後檢查它與類型數組。查看我的答案,找出可能的解決方案 – mason81

回答

0

你可能只是做你內心的foreach:

 
foreach ($pricearray as $index => $array) { 
      if ($q >= $array[0]) { 
       if($q == 10000) { continue; } 
       $new_array = array($q, $array[1]); 
      } 

     } 

+0

對不起,我通常不擅長解釋我的問題。 它需要是一般的,我可能會得到一個數組tat只包含100和500的數量。在這種情況下,我不希望看到新陣列中的數量大於500。 – Justin

0

OK我想這應該做的伎倆。我認爲這個問題是在您的比較...查看代碼:

function getRelativePrices($pricearray) { 
    $relativeprices= array(); 
    $types = array(10,100,500,1000,5000,10000); 
    foreach($pricearray as $p) { 
     $new_array = array(); 
     foreach($types as $t) { 
      if($p[0] <= $t) { 
       $new_array = array($t,$p[1]); 
       break; 
      } 
     } 
     if(sizeof($new_array)) { 
      $relativeprices[] = $new_array; 
     } 
    } 
    return $relativeprices; 
} 

這是基於你的代碼示例我測試的例子:

function getRelativePrices($pricearray) { 
    $relativeprices= array(); 
    $types = array(10,100,500,1000,5000,10000); 
    foreach($pricearray as $p) { 
     $new_array = array(); 
     foreach($types as $t) { 
      if($p[0] <= $t) { 
       $new_array = array($t,$p[1]); 
       break; 
      } 
     } 
     if(sizeof($new_array)) { 
      $relativeprices[] = $new_array; 
     } 
    } 
    return $relativeprices; 
} 


$test = array (
    0 => array (
     0 => 50, 
     1 => 0.80 
    ), 
    1 => array (
     0 => 300, 
     1 => 0.50 
    ), 
    2 => array (
     0 => 600, 
     1 => 0.30 
    ), 
    3 => array (
     0 => 1000, 
     1 => 0.20 
    ), 
    4 => array (
     0 => 4000, 
     1 => 0.10 
    ) 
); 

print_r(getRelativePrices($test)); 

輸出功率爲:

Array 
(
    [0] => Array 
     (
      [0] => 100 
      [1] => 0.8 
     ) 

    [1] => Array 
     (
      [0] => 500 
      [1] => 0.5 
     ) 

    [2] => Array 
     (
      [0] => 1000 
      [1] => 0.3 
     ) 

    [3] => Array 
     (
      [0] => 1000 
      [1] => 0.2 
     ) 

    [4] => Array 
     (
      [0] => 5000 
      [1] => 0.1 
     ) 

)