2016-11-30 45 views
0

我已經查找了很多類似於此的線程,但主要區別在於,在這些線程中,「children」元素只有1每個值。我的問題稍有不同:「拼合」多維數組由「組合」兒童(即:7 x 7 = 49)

你有一個2級的數組,第一級是「選項類型」(即:顏色,大小,結構等),第二級是「選項值」(即:紅色,藍色,6號,7號,皮革,棉花等)。我想將這個陣列「扁平化」成一個單一的水平陣列,它結合了選項(即:紅色 - 尺寸6-皮革,紅色 - 尺碼6-棉布,藍色 - 尺碼6-皮革等)。

因此,如果有兩個選項類型和7個選項,結果數組將有49個鍵,如果有3個選項類型和5個選項,則結果數組將有125個鍵。

實施例的數據集

Array 
(
    [0] => Array 
     (
      [option_id] => 1 
      [option_name] => Color 
      [option_values] => Array 
       (
        [0] => Array 
         (
          [poa_id] => 24 
          [poa_name] => Black 
          [poa] => POA575628 
          [poa_price] => 0.0000 
          [small_image] => http://img2.banggood.com/thumb/other_items//upload/2015/09/SKU279024_3.jpg 
          [view_image] => http://img3.banggood.com/thumb/view//upload/2015/09/SKU279024_3.jpg 
          [large_image] => http://img3.banggood.com/thumb/large//upload/2015/09/SKU279024_3.jpg 
          [list_grid_image] => http://img1.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_3.jpg 
         ) 

        [1] => Array 
         (
          [poa_id] => 41 
          [poa_name] => Brown 
          [poa] => POA575649 
          [poa_price] => 0.0000 
          [small_image] => http://img1.banggood.com/thumb/other_items//upload/2015/09/SKU279024_5.jpg 
          [view_image] => http://img2.banggood.com/thumb/view//upload/2015/09/SKU279024_5.jpg 
          [large_image] => http://img1.banggood.com/thumb/large//upload/2015/09/SKU279024_5.jpg 
          [list_grid_image] => http://img.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_5.jpg 
         ) 
       ) 
     ) 

    [1] => Array 
     (
      [option_id] => 8 
      [option_name] => Size(US) 
      [option_values] => Array 
       (
        [0] => Array 
         (
          [poa_id] => 10384 
          [poa_name] => 6.5 
          [poa] => POA575643 
          [poa_price] => 0.0000 
         ) 

        [1] => Array 
         (
          [poa_id] => 90 
          [poa_name] => 7 
          [poa] => POA575644 
          [poa_price] => 0.0000 
         ) 
       ) 
     ) 
) 

必需數據組(2×2 = 4數組鍵)

Array 
(
    [0] => Array 
     ( 
      [0] => Array 
       (
        [poa_id] => 24 
        [poa_name] => Black 
        [poa] => POA575628 
        [poa_price] => 0.0000 
        [small_image] => http://img2.banggood.com/thumb/other_items//upload/2015/09/SKU279024_3.jpg 
        [view_image] => http://img3.banggood.com/thumb/view//upload/2015/09/SKU279024_3.jpg 
        [large_image] => http://img3.banggood.com/thumb/large//upload/2015/09/SKU279024_3.jpg 
        [list_grid_image] => http://img1.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_3.jpg 
       ) 

      [1] => Array 
       (
        [poa_id] => 10384 
        [poa_name] => 6.5 
        [poa] => POA575643 
        [poa_price] => 0.0000 
       ) 
     ) 

    [1] => Array 
     ( 
      [0] => Array 
       (
        [poa_id] => 24 
        [poa_name] => Black 
        [poa] => POA575628 
        [poa_price] => 0.0000 
        [small_image] => http://img2.banggood.com/thumb/other_items//upload/2015/09/SKU279024_3.jpg 
        [view_image] => http://img3.banggood.com/thumb/view//upload/2015/09/SKU279024_3.jpg 
        [large_image] => http://img3.banggood.com/thumb/large//upload/2015/09/SKU279024_3.jpg 
        [list_grid_image] => http://img1.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_3.jpg 
       ) 

      [1] => Array 
       (
        [poa_id] => 90 
        [poa_name] => 7 
        [poa] => POA575644 
        [poa_price] => 0.0000 
       ) 
     ) 

    [2] => Array 
     ( 
      [0] => Array 
       (
        [poa_id] => 41 
        [poa_name] => Brown 
        [poa] => POA575649 
        [poa_price] => 0.0000 
        [small_image] => http://img1.banggood.com/thumb/other_items//upload/2015/09/SKU279024_5.jpg 
        [view_image] => http://img2.banggood.com/thumb/view//upload/2015/09/SKU279024_5.jpg 
        [large_image] => http://img1.banggood.com/thumb/large//upload/2015/09/SKU279024_5.jpg 
        [list_grid_image] => http://img.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_5.jpg 
       ) 

      [1] => Array 
       (
        [poa_id] => 10384 
        [poa_name] => 6.5 
        [poa] => POA575643 
        [poa_price] => 0.0000 
       ) 
     ) 

    [3] => Array 
     ( 
      [0] => Array 
       (
        [poa_id] => 41 
        [poa_name] => Brown 
        [poa] => POA575649 
        [poa_price] => 0.0000 
        [small_image] => http://img1.banggood.com/thumb/other_items//upload/2015/09/SKU279024_5.jpg 
        [view_image] => http://img2.banggood.com/thumb/view//upload/2015/09/SKU279024_5.jpg 
        [large_image] => http://img1.banggood.com/thumb/large//upload/2015/09/SKU279024_5.jpg 
        [list_grid_image] => http://img.banggood.com/thumb/list_grid//upload/2015/09/SKU279024_5.jpg 
       ) 

      [1] => Array 
       (
        [poa_id] => 90 
        [poa_name] => 7 
        [poa] => POA575644 
        [poa_price] => 0.0000 
       ) 
     ) 
) 
+0

@Bobot我試着實現這個作爲遞歸函數,我使用array_shift()分隔第一個「選項類型集」,然後用剩餘的選項集調用函數,直到沒有剩下的選項集,然後將分隔的選項集與返回的「兒童套裝」。但是,我一直無法找到一個解決方案,其中所有選項集的值都處於相同的「級別」,總是會有一些額外的不需要的子數組(由於遞歸)。我一直無法提出正確的算法來完成我所需要的。 – Magnanimity

+0

@Bobot我目前的推理是用第一組選項創建一個數組,然後在第二個遞歸中「複製」每個第二選項的內容並添加第二個選項,然後重複所有選項集,然後刪除任何鍵其中count($ array [$ key]) Magnanimity

回答

0

(2與每個2個選項選項類型)
function populateOptions($options,$populatedArray) 
{ 
    $optionSet = array_shift($options); 
    $returnArray = array(); 
    foreach($optionSet['option_values'] as $option) 
    { 
     foreach($populatedArray as $addedOption) 
     { 
      $addedOption[] = $option; 
      $returnArray[] = $addedOption; 
     } 
    } 

    if (!empty(count($options))) $returnArray = populateOptions($options, $returnArray); 

    return $returnArray;  
} 

$productOptions = populateOptions($optionSets,array('0' => null));