【问题标题】:PHP:Merge array values when key has same value [duplicate]PHP:当键具有相同值时合并数组值[重复]
【发布时间】:2018-06-18 11:58:35
【问题描述】:

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

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,
                )
             )
        )

)

【问题讨论】:

  • 你已经尝试了什么?
  • 我尝试过这样的事情。 $response=array();$user_email=$result['user_email']; foreach ($result as $value) { $data=array('available_date'=>$value['available_date'],'available_time'=>$value['available_time']); array_push($response, $data); }$res['user_email']=$user_email; $res['available_list']=$response; print_r($res);它只是列出了第一个用户数组中的所有日期时间。让我看看我是否可以使用@Alessandro 的解决方案来解决问题

标签: php arrays codeigniter multidimensional-array


【解决方案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 ) ) ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2018-09-06
    • 2022-10-24
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多