-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] の値が一致する場合は、それらを 1 つの配列にマージする必要があります。それ以外の場合は、別の配列にマージする必要があります。出力は次のようになります。

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 に答える