【问题标题】:PHP For Each Append Array每个附加数组的 PHP
【发布时间】:2016-09-09 16:22:54
【问题描述】:

示例代码数组:https://eval.in/639002

一位 (user_id = 1) 的客人购买了多张门票 (ticket_id = 1 & 2) 参加活动 (event_id = 11)。

我期待结果格式:

[ticket] => Array
(
  [1] => Ticket Name, ***
  [2] => Ticket Name
)

下面的代码示例:

$data_db = array(
    array(
        'id' => 1,
        'user_id' => 1,
        'event_id' => 11,
        'ticket_id' => 1,
        'user_name' => 'guest 1'
    ),
    array(
        'id' => 2,
        'user_id' => 2,
        'event_id' => 11,
        'ticket_id' => 1,
        'user_name' => 'guest 2'
    ),
    array(
        'id' => 3,
        'user_id' => 3,
        'event_id' => 22,
        'ticket_id' => 1,
        'user_name' => 'guest 3'
    ),
    array(
        'id' => 4,
        'user_id' => 1,
        'event_id' => 11,
        'ticket_id' => 2,
        'user_name' => 'guest 1'
    )
);

$output = [];

foreach ( $data_db as $key => $row ) {

    $output[ $row['event_id'] ]['event'] = 'Event Name';    
    $output[ $row['event_id'] ]['attendee'][ $row['user_id'] ] = $row;

    $output[ $row['event_id'] ]['attendee'][ $row['user_id'] ]['ticket'][ $row['ticket_id'] ] = 'Ticket Name';

}

print_r($output);

当前结果

Array
(
    [11] => Array
        (
            [event] => Event Name
            [attendee] => Array
                (
                    [1] => Array
                        (
                            [id] => 4
                            [user_id] => 1
                            [event_id] => 11
                            [ticket_id] => 2
                            [user_name] => guest 1
                            [ticket] => Array
                                (
                                    [2] => Ticket Name
                                )

                        )

                    [2] => Array
                        (
                            [id] => 2
                            [user_id] => 2
                            [event_id] => 11
                            [ticket_id] => 1
                            [user_name] => guest 2
                            [ticket] => Array
                                (
                                    [1] => Ticket Name ***
                                )

                        )

                )

        )

    [22] => Array
        (
            [event] => Event Name
            [attendee] => Array
                (
                    [3] => Array
                        (
                            [id] => 3
                            [user_id] => 3
                            [event_id] => 22
                            [ticket_id] => 1
                            [user_name] => guest 3
                            [ticket] => Array
                                (
                                    [1] => Ticket Name
                                )

                        )

                )

        )

)

【问题讨论】:

  • 请举个例子,你想要什么类型的输出数组。

标签: php arrays multidimensional-array


【解决方案1】:

首先你可以从整理出一张票属于哪个用户的票的数组开始:

$output = [];

foreach($data_db as $key=>$row) {
  // Define new $tickets Array E.g ['guest_name']=>['ticket_id']
  $tickets[$row['user_name']][] = $row['ticket_id'];
  $output [] = [
               'id'=>$row['id'], 
               'user_id'=>$row['user_id'], 
               'event_id'=>$row['event_id'], 
               'user_name'=>$row['user_name'],
               'tickets'=>[]
              ];
}

$tickets 的输出如下所示:

Array
(
    [guest 1] => Array
        (
            [0] => 1
            [1] => 2
        )
    [guest 2] => Array
        (
            [0] => 1
        )
    [guest 3] => Array
        (
            [0] => 1
        )
)

然后你可以把它们组合起来,像这样:

foreach($output as $k=>$v){
 foreach($tickets as $guest=>$ticket){

    if($v['user_name'] == $guest){
      $output[$k]['tickets'] = $ticket;
    }

  }
}

你的输出是:

Array
(
    [0] => Array
        (
            [id] => 1
            [user_id] => 1
            [event_id] => 11
            [user_name] => guest 1
            [tickets] => Array
                (
                    [0] => 1
                    [1] => 2
                )

        )

    [1] => Array
        (
            [id] => 2
            [user_id] => 2
            [event_id] => 11
            [user_name] => guest 2
            [tickets] => Array
                (
                    [0] => 1
                )
              ........

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2017-05-15
    相关资源
    最近更新 更多