PHP:当键具有相同值时合并数组值

时间:2018-06-18 11:58:35

标签: php arrays codeigniter multidimensional-array

我有一个像这样的多维数组。我必须以某种方式对相同用户的数据进行排序。

Array
(
    [0] => Array
        (
            [user_email] => example@gmail.com
            [available_date] => 2018/06/30
            [available_time] => 06.00,06.30,07.00,07.30
        )

    [1] => Array
        (
            [user_email] => example@gmail.com
            [available_date] => 2018/06/31
            [available_time] => 06.30,07.00,07.30,08.00
        )

    [3] => Array
        (
            [user_email] => newuser@gmail.com
            [available_date] => 2018/06/31
            [available_time] => 08.00,08.30,09.00,09.30
        )

    [4] => Array
        (
            [user_email] => newuser@gmail.com
            [available_date] => 2018/06/30
            [available_time] => 08.30,09.00,09.30,10.00
        )

)
)

我希望最终的数组是这样的,其中available_date和可用时间将合并为具有同一用户的键名的数组。也许这很容易,但我被困住了。任何帮助都将不胜感激。

Array
(

    [0] => Array
        (
            [user_email] => example@gmail.com
            [date_time] => Array
            (
              [0]=>Array
                (
                  [date] => 2018/06/30
                  [time] => 06.00,06.30,07.00,07.30,
                )
              [1]=>Array
                (
                  [date] => 2018/06/31
                  [time] => 06.30,07.00,07.30,08.00,
                )
             )
        )

    [1] => Array
        (
            [user_email] => newuser@gmail.com
            [date_time] => Array
            (
              [0]=>Array
                (
                  [date] => 2018/06/31,
                  [time] => 08.00,08.30,09.00,09.30,
                )
              [1]=>Array
                (
                  [date] => 2018/06/30,
                  [time] => 08.30,09.00,09.30,10.00,
                )
             )
        )

)

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$x =
[
    "0" => [
            "user_email" => "example@gmail.com",
            "available_date" => "2018/06/30",
            "available_time" => "06.00,06.30,07.00,07.30",
        ],

    "1" => [
            "user_email" => "example@gmail.com",
            "available_date" => "2018/06/31",
            "available_time" => "06.30,07.00,07.30,08.00,"
        ],

    "3" => [
            "user_email" => "newuser@gmail.com",
            "available_date" => "2018/06/31",
            "available_time" => "08.00,08.30,09.00,09.30",
        ],

    "4" => [
            "user_email" => "newuser@gmail.com",
            "available_date" => "2018/06/30",
            "available_time" => "08.30,09.00,09.30,10.00",
        ]
];


$result = [];

foreach ($x as $item) {
    $temp['date'] = $item['available_date'];
    $temp['time'] = $item['available_time'];
    $result[$item['user_email']]['date_time'][] = $temp;
}

print_r($result);

结果如下:

Array ( [example@gmail.com] => Array ( [date_time] => Array ( [0] => Array ( [date] => 2018/06/30 [time] => 06.00,06.30,07.00,07.30 ) [1] => Array ( [date] => 2018/06/31 [time] => 06.30,07.00,07.30,08.00, ) ) ) [newuser@gmail.com] => Array ( [date_time] => Array ( [0] => Array ( [date] => 2018/06/31 [time] => 08.00,08.30,09.00,09.30 ) [1] => Array ( [date] => 2018/06/30 [time] => 08.30,09.00,09.30,10.00 ) ) ) )