在PHP中组合数组元素

时间:2013-09-25 10:20:56

标签: php arrays for-loop multidimensional-array

我正在尝试从数组中获取所需的输出。 我从这样的for循环中获取数据数组:

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],[ProductID]和[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
)

请帮我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分: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'
               )
     )
 )

如果数组的格式是这样的,那么你将能够编写一个将输入数组转换为这样的数组的函数。希望这会有所帮助。

编辑:现在,这是负责转型的功能。 我没有测试它,但似乎算法很好:)

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;
}

答案 1 :(得分:-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']);
            }

        }
    }