2013-09-25 127 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文件 –