2013-09-25 84 views
-2

我想從數組中獲取所需的輸出。 我得到的數據陣列從一個循環是這樣的:在PHP中組合數組元素

Array 
(
[TIMESLOTID] => 27 
[DATE] => za 05-04-2014 15:00 
[ProductID] => 196 
[VariantID] => 1079 
) 
Array 
(
[TIMESLOTID] => 27 
[DATE] => za 12-04-2014 15:00 
[ProductID] => 196 
[VariantID] => 1079 
) 
Array 
(
[TIMESLOTID] => 27 
[DATE] => za 29-03-2014 15:00 
[ProductID] => 196 
[VariantID] => 1079 
) 
Array 
(
[TIMESLOTID] => 23 
[DATE] => ma 07-04-2014 10:00 
[ProductID] => 196 
[VariantID] => 1083 
) 

,如果現在的值[TIMESLOTID],[產品ID]和[VariantID]匹配,他們應該合併成一個陣列,否則在一個單獨的陣列。輸出將如下所示:

Array 
(
[TIMESLOTID] => 27 
[DATE] => 
    Array 
    (
    [DATE] => za 05-04-2014 15:00, 
    [DATE] => za 12-04-2014 15:00, 
    [DATE] => za 29-03-2014 15:00 
    ), 
[ProductID] => 196, 
[VariantID] => 1079 
), 
Array 
(
[TIMESLOTID] => 23, 
[DATE] => ma 07-04-2014 10:00, 
[ProductID] => 196, 
[VariantID] => 1083 
) 

請幫我解決這個問題。提前致謝。

+3

我們希望你告訴你的嘗試,並告訴我們你在哪裏卡住完全相同。 – PeeHaa

+0

@PeeHaa我已經設法跟蹤值匹配的循環中的記錄。但是我被困在了上面給出的日期記錄中。我有嘗試array_merge和array_combine但沒有得到確切的格式。 – Viral

回答

0

好的,所以,在任何答案之前的一些精度。

您想獲得該數組是無效的,因爲某些原因:

  • 你不能有多個同名的密鑰。
  • 對於排序的原因,我會(IMO)使用與鍵(timeslotID)和值的全局陣列(陣列的productID,variantID和日期是索引和值的數組)

所以,一個有效的數組將是:

Array(
    [27] => Array(
       [ProductID] => 196, 
       [VariantID] => 1079, 
       [Dates] => Array(
        [0] => 'za 05-04-2014 15:00', 
        [1] => 'za 12-04-2014 15:00' 
        ..... 
       ) 
    ), 
    [23] => Array(
       [ProductID] => 196, 
       [VariantID] => 1083, 
       [Dates] => Array(
        [0] => 'ma 07-04-2014 10:00' 
       ) 
    ) 
) 

如果數組被格式化一樣,那麼你就可以寫輸入數組轉換成這樣的一個數組的函數。希望這可以幫助。

編輯:現在,這裏是負責轉換的功能。 我沒有測試它,但它似乎algoritmatically不錯:)

function transformArray($inputArray){ 
    $toReturn = array(); 

    foreach($inputArray as $product){ 
     if(in_array($product['TIMESLOTID'],array_keys($toReturn))){ 
      array_push($toReturn[$product['TIMESLOTID']]['Dates'],$product['DATE']); 
     } 
     else { 
      $toReturn[$product['TIMESLOTID']] = array(
       'ProductID' => $product['ProductID'], 
       'VariantID' => $product['VariantID'], 
       'Dates' => array(
        $product['DATE'] 
       ) 
      ); 
     } 
    } 
    return $toReturn; 
} 
+0

謝謝文森特。這正是我想要的。你能告訴我,我應該寫在我的for循環以獲得上述輸出? – Viral

+0

你走了。我編輯了我的第一篇文章。 –

+0

謝謝文森特。它像一個魅力。 – Viral

-1
$list = array(
     array 
     (
     'TIMESLOTID' => 27, 
     'DATE' => "05-04-2014 15:00", 
     'ProductID' => 196, 
     'VariantID' => 1079 
     ), 

     array 
     (
     'TIMESLOTID' => 27, 
     'DATE' => "12-05-2014 15:00", 
     'ProductID' => 196, 
     'VariantID' => 1079 
     ), 

     array 
     (
     'TIMESLOTID' => 27, 
     'DATE' => "29-03-2014 15:00", 
     'ProductID' => 196, 
     'VariantID' => 1079 
     ), 

     array 
     (
     'TIMESLOTID' => 23, 
     'DATE' => "07-04-2014 10:00", 
     'ProductID' => 196, 
     'VariantID' => 1083 
     ) 

    ); 
    $return = array(); 

    for($i=0;$i<sizeof($list);$i++) { 
     if(!array_key_exists($list[$i]['TIMESLOTID'], $return)) { 
      $return[$list[$i]['TIMESLOTID']] = $list[$i]; 
     } else { 
      if(sizeof($return[$list[$i]['TIMESLOTID']]['DATE']) == 1) { 
       $date = $return[$list[$i]['TIMESLOTID']]['DATE']; 
       $return[$list[$i]['TIMESLOTID']]['DATE'] = array($date,$list[$i]['DATE']); 
      } else { 
       array_push($return[$list[$i]['TIMESLOTID']]['DATE'],$list[$i]['DATE']); 
      } 

     } 
    } 
+0

感謝您的回覆,但上面是我有的數組,我想合併元素,正如我在我的問題中提到的。 – Viral

+0

它使用for循環合併:s,juste測試它複製並粘貼我的php文件 –