2014-06-27 25 views
0

我有一個給定的陣列,例如:最終元件()不進行比較

Array 
(
[0] => Array 
    (
     [product_colour_sizes_id] => 31822 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 297 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 6  
     [product_colour_sizes_name_colours] => Grey 
    ) 

[1] => Array 
    (
     [product_colour_sizes_id] => 31823 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 295 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 7  
     [product_colour_sizes_name_colours] => Grey 
    ) 

[2] => Array 
    (
     [product_colour_sizes_id] => 31824 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 242 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 8  
     [product_colour_sizes_name_colours] => Grey 
    ) 

[3] => Array 
    (
     [product_colour_sizes_id] => 31825 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 296 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 9  
     [product_colour_sizes_name_colours] => Grey 
    ) 

[4] => Array 
    (
     [product_colour_sizes_id] => 31826 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 243 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 10  
     [product_colour_sizes_name_colours] => Grey 
    ) 

) 

我然後有一個循環foreach()其中循環通過上述數據,並減少到一個單一的陣列。循環要做到這一點在這裏:

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

    // Set the offiset key. 
    $offset_key = $key + 1; 
    if(array_key_exists($offset_key, $product_combinations)){ 
     echo 'Yes' . '<br>'; 
    } 

    // Check if the array key exists. 
    if (array_key_exists($offset_key, $product_combinations)) { 

     // Core logic. 
     if ($product_combinations[$offset_key]['product_colour_sizes_name_colours'] == $product_combinations[$key]['product_colour_sizes_name_colours']) { 

      $color = $product_combinations[$key]['product_colour_sizes_name_colours']; 
      $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' . $id_increment] =$product_combination['product_colour_sizes_option_value_size_id']; 
      $id_increment++; 
     } 

     // Add the sizes to the color array. 
     $colours[$color] = $sizes; 

    } // if (==) 

} // foreach 

問題是,這個循環不比較最後索引數組。我已經嘗試了這個邏輯的幾次迭代無濟於事。這是它沒有循環的最後一個數組。

[4] => Array 
    (
     [product_colour_sizes_id] => 31826 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 243 
     [quantity] => 999 
     [product_colour_sizes_name_sizes] => 10  
     [product_colour_sizes_name_colours] => Grey 
    ) 

從遍歷數據的結果,目前給我這樣的結果:

Array 
(
[Grey] => Array 
    (
     [297] => 6  
     [quantity] => 999 
     [product_colour_sizes_id] => 31825 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 297 
     [295] => 7  
     [product_colour_sizes_option_value_size_id1] => 295 
     [242] => 8  
     [product_colour_sizes_option_value_size_id2] => 242 
     [296] => 9  
     [product_colour_sizes_option_value_size_id3] => 296 
    ) 

) 

不過,我希望它看起來就像是這樣的,隨着最後一個元素進行比較,包括:

[Grey] => Array 
    (  
     [quantity] => 999 
     [product_colour_sizes_id] => 31825 
     [product_colour_sizes_product_id] => 1495 
     [product_colour_sizes_option_value_colour_id] => 377 
     [product_colour_sizes_option_value_size_id] => 297 
     [295] => 7  
     [product_colour_sizes_option_value_size_id1] => 295 
     [242] => 8  
     [product_colour_sizes_option_value_size_id2] => 242 
     [296] => 9  
     [product_colour_sizes_option_value_size_id3] => 296 
     [297] => 6 
     [product_colour_sizes_option_value_size_id4] => 243 
     [243] => 10 

    ) 

) 
+0

難道是因爲您立即將$ key加1,因此訪問數組中的下一行? '$ offset_key = $ key + 1;' – bloodyKnuckles

+1

'if(array_key_exists($ offset_key,$ product_combinations))'將在最後一個元素上總是失敗,因爲它檢查下一個索引是否存在於數組中,顯然不會當你到最後。 – Barmar

回答

1

你的問題就在這裏:

// Set the offiset key. 
    $offset_key = $key + 1; 
     if(array_key_exists($offset_key, $product_combinations)){ 
      echo 'Yes' . '<br>'; 
     } 

只要喲開始循環,您就可以向$ key添加+1,從位置1而不是位置0(您的代碼搜索n + 1位置,因此比最大數組元素大1)有效地啓動數組。

您需要在此更改您的邏輯。