-2

我正在尝试从数组中获取所需的输出。我从这样的 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
)

请帮助我。提前致谢。

4

2 回答 2

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;
}
于 2013-09-25T10:41:43.767 回答
-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']);
            }

        }
    }
于 2013-09-25T10:38:52.477 回答