2014-06-27 23 views
0

我有值的數組這樣:PHP的foreach()的最後一個值不被比較

Array 
(
[0] => Array 
    (
     [product_colour_sizes_id] => 37105 
     [product_colour_sizes_product_id] => 810 
     [product_colour_sizes_option_value_colour_id] => 61 
     [product_colour_sizes_option_value_size_id] => 904 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 16-165 
     [product_colour_sizes_name_colours] => Red 
    ) 

[1] => Array 
    (
     [product_colour_sizes_id] => 37104 
     [product_colour_sizes_product_id] => 810 
     [product_colour_sizes_option_value_colour_id] => 61 
     [product_colour_sizes_option_value_size_id] => 905 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 17-175 
     [product_colour_sizes_name_colours] => Red 
    ) 

[2] => Array 
    (
     [product_colour_sizes_id] => 37103 
     [product_colour_sizes_product_id] => 810 
     [product_colour_sizes_option_value_colour_id] => 61 
     [product_colour_sizes_option_value_size_id] => 906 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 185-19 
     [product_colour_sizes_name_colours] => Red 
    ) 

[3] => Array 
    (
     [product_colour_sizes_id] => 37102 
     [product_colour_sizes_product_id] => 810 
     [product_colour_sizes_option_value_colour_id] => 61 
     [product_colour_sizes_option_value_size_id] => 907 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 19.5 
     [product_colour_sizes_name_colours] => Red 
    ) 

) 

我然後有一個foreach循環,其在上述數據進行迭代,並且減小了每個陣列到一個單一的行對應到不同的[product_colour_sizes_name_sizes]。不過,我有一個問題,最後一個數組沒有被比較。這是我的循環:

foreach($product_combinations as $key => $product_combination){ 

if($key > -1){ 
    if($product_combinations[$key+1]['product_colour_sizes_name_colours'] 
     == $product_combinations[$key]['product_colour_sizes_name_colours'] 
    ){ 

     $color = $product_combinations[$key]['product_colour_sizes_name_colours']; 
     $color['name'] = $color; 
     $id = $product_combinations[$key]['product_colour_sizes_option_value_size_id']; 
     $sizes[$id] = $product_combinations[$key]['product_colour_sizes_name_sizes']; 
     $quantity = $product_combinations[$key]['quantity']; 
     $sizes['quantity'] = $quantity; 



     /* Dont forget theses*/ 
     $sizes['product_colour_sizes_id'] = $product_combination['product_colour_sizes_id']; 
     $sizes['product_colour_sizes_product_id'] = $product_combination['product_colour_sizes_product_id']; 
     $sizes['product_colour_sizes_option_value_colour_id'] = $product_combination['product_colour_sizes_option_value_colour_id']; 
     $sizes["product_colour_sizes_option_value_size_id$x"] =$product_combination['product_colour_sizes_option_value_size_id']; 
     $x++; 
    } else { 
     array_push($colours, 
     array(
      $color => $sizes 

     )); 

     unset($sizes); 
     $x = 0; 
    } 
} 
} 

本質現在,我的第四([3])陣列被相比, $product_combinations[$key+1] == $product_combinations[$key]['product_colour_sizes_name_colours']$key+1是空值。

我知道如上所述的問題,但想不出用我目前的邏輯來克服它的好方法,任何人都可以想到一個解決方案嗎?

編輯 什麼,我試圖做的是減少排下來到這個確切的陣列結構(與上次陣列包括課程,目前不能添加的):

Array 
(
[0] => Array 
    (
     [Red] => Array 
      (
       [904] => 16-165 
       [quantity] => 999 
       [product_colour_sizes_id] => 37103 
       [product_colour_sizes_product_id] => 810 
       [product_colour_sizes_option_value_colour_id] => 61 
       [product_colour_sizes_option_value_size_id0] => 904 
       [905] => 17-175 
       [product_colour_sizes_option_value_size_id1] => 905 
       [906] => 185-19 
       [product_colour_sizes_option_value_size_id2] => 906 
      ) 

    ) 

) 
+0

你不需要在任何地方對'$ key + 1'類型的鍵進行硬編碼,使用多維數組應該是一個很好的選擇。如果無法繞過它,請確保在嘗試訪問它之前檢查數組密鑰是否存在。 –

+0

它可能爲空,因爲它的字符而不是數字。嘗試這樣 - [product_colour_sizes_name_colours] =>「紅色」 – Tasos

+0

@Tasos這只是通過'print_r'而不是真正的數組轉儲數組。如果你關心的是這段代碼中的問題,我創建了一個基於我在答案中發佈的值的測試數組。 – JakeGould

回答

1

有點不清楚在您的原始核心邏輯上,但基於您的示例輸出數據,我相信下面的解決方案應該可以工作。

關鍵是真正理解您的最終期望的輸出,因爲很多原始代碼經歷的邏輯循環可以通過使用關聯數組的魔術來消除。這解決了整個$key+1匹配$key問題 - 由於$key+1邏輯的固有缺陷以及其他一些問題,該問題永遠不會獲得最後一個值。

無論如何,這裏是包含Blue顏色的額外值的測試值數組,除了Red;清理代碼如下:

// Test data array. 
$product_combinations = array(); 

$product_combinations[0][product_colour_sizes_id] = 37105; 
$product_combinations[0][product_colour_sizes_product_id] = 810; 
$product_combinations[0][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[0][product_colour_sizes_option_value_size_id] = 904; 
$product_combinations[0][quantity] = 999; 
$product_combinations[0][product_colour_sizes_name_sizes] = '16-165'; 
$product_combinations[0][product_colour_sizes_name_colours] = 'Red'; 

$product_combinations[1][product_colour_sizes_id] = 37104; 
$product_combinations[1][product_colour_sizes_product_id] = 810; 
$product_combinations[1][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[1][product_colour_sizes_option_value_size_id] = 905; 
$product_combinations[1][quantity] = 999; 
$product_combinations[1][product_colour_sizes_name_sizes] = '17-175'; 
$product_combinations[1][product_colour_sizes_name_colours] = 'Red'; 

$product_combinations[2][product_colour_sizes_id] = 37103; 
$product_combinations[2][product_colour_sizes_product_id] = 810; 
$product_combinations[2][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[2][product_colour_sizes_option_value_size_id] = 906; 
$product_combinations[2][quantity] = 999; 
$product_combinations[2][product_colour_sizes_name_sizes] = '185-19'; 
$product_combinations[2][product_colour_sizes_name_colours] = 'Red'; 

$product_combinations[3][product_colour_sizes_id] = 37102; 
$product_combinations[3][product_colour_sizes_product_id] = 810; 
$product_combinations[3][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[3][product_colour_sizes_option_value_size_id] = 907; 
$product_combinations[3][quantity] = 999; 
$product_combinations[3][product_colour_sizes_name_sizes] = '19.5'; 
$product_combinations[3][product_colour_sizes_name_colours] = 'Red'; 

$product_combinations[4][product_colour_sizes_id] = 37102; 
$product_combinations[4][product_colour_sizes_product_id] = 810; 
$product_combinations[4][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[4][product_colour_sizes_option_value_size_id] = 907; 
$product_combinations[4][quantity] = 999; 
$product_combinations[4][product_colour_sizes_name_sizes] = '19.5'; 
$product_combinations[4][product_colour_sizes_name_colours] = 'Blue'; 

$product_combinations[5][product_colour_sizes_id] = 37103; 
$product_combinations[5][product_colour_sizes_product_id] = 810; 
$product_combinations[5][product_colour_sizes_option_value_colour_id] = 61; 
$product_combinations[5][product_colour_sizes_option_value_size_id] = 906; 
$product_combinations[5][quantity] = 999; 
$product_combinations[5][product_colour_sizes_name_sizes] = '185-19'; 
$product_combinations[5][product_colour_sizes_name_colours] = 'Blue'; 

這裏是在原有基礎上的海報的代碼&期望輸出返工代碼邏輯:

​​

的,這個輸出將是:

Array 
(
    [Red] => Array 
     (
      [904] => 16-165 
      [quantity] => 999 
      [product_colour_sizes_id] => 37102 
      [product_colour_sizes_product_id] => 810 
      [product_colour_sizes_option_value_colour_id] => 61 
      [product_colour_sizes_option_value_size_id] => 904 
      [905] => 17-175 
      [product_colour_sizes_option_value_size_id1] => 905 
      [906] => 185-19 
      [product_colour_sizes_option_value_size_id2] => 906 
      [907] => 19.5 
      [product_colour_sizes_option_value_size_id3] => 907 
     ) 

    [Blue] => Array 
     (
      [907] => 19.5 
      [quantity] => 999 
      [product_colour_sizes_id] => 37103 
      [product_colour_sizes_product_id] => 810 
      [product_colour_sizes_option_value_colour_id] => 61 
      [product_colour_sizes_option_value_size_id] => 907 
      [906] => 185-19 
      [product_colour_sizes_option_value_size_id1] => 906 
     ) 

) 
+0

感謝您的回覆!這是別人的代碼,我打算重新計算。無論如何,這返回給我一個'colors []'的空數組。似乎他們沒有被推。將更多地關注它。 – Zy0n

+0

@CianGallagher那麼,這個樣本數據的核心目標是什麼?它是否在數組中滾動並在'$ colours'中呈現一組顏色? – JakeGould

+0

@CianGallagher好的,更清楚。看看我最近的編輯。我相信它應該起作用。但正如我所說,似乎重構整體結構將是更好的長期解決方案。 – JakeGould

相關問題