在PHP中从顺序数组创建嵌套数组

在PHP中从顺序数组创建嵌套数组,php,arrays,loops,multidimensional-array,foreach,Php,Arrays,Loops,Multidimensional Array,Foreach,我需要帮助排序在PHP数组。我收到的这些阵列如下所示: Array ( [0] => Array ( [0] => Array ( [id] => 1 [username] => STLUserFolks [event_id] => 7e0a2faa-43c8-4552-b0ec-c4d0fa6c00d1 [event_on] => 2020

我需要帮助排序在PHP数组。我收到的这些阵列如下所示:

Array (
    [0] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 7e0a2faa-43c8-4552-b0ec-c4d0fa6c00d1
            [event_on] => 2020-06-29 17:39:25.93432
            [ent_pix] =>
            [\"images/events/STLUserFolks/tammy1.jpeg\",\"images/events/STLUserFolks/tammy2.jpeg\",\"images/events/STLUserFolks/tammy3.jpeg\",\"images/events/STLUserFolks/tammy4.jpeg\",\"images/events/STLUserFolks/tammy5.jpeg\",\"images/events/STLUserFolks/tammy6.jpeg\"]
            [amount] => 20
            [event_title] => Fun on vacation with friends.
            [event_type] => mix
            [event_details] => Saw Great and interesting sites today!
        )
    )
    [1] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
            [event_on] => 2020-07-09 05:39:10.588842
            [ent_pix] =>
            [\"images/events/STLUserFolks/680.JPG\",\"images/events/STLUserFolks/681.JPG\",\"images/events/STLUserFolks/682.JPG\"]
            [amount] => 25
            [event_title] => Sexy Warm
            [event_type] => photos
            [event_details] => Feeling the sun on our faces.
        )
        [1] => Array (
            [id] => 1
            [user_id] => 2
            [username] => STLUserFolks
            [member_user] => spiffy_user
            [comment_text] => Amazing! you guys are simply amazing!
            [created_on] => 2020-07-10 15:04:46.480001
            [comment_id] => c803294d-8483-43c9-a76b-4cba56795266
            [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
        )
    )
    [2] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
            [event_on] => 2020-07-09 07:11:32.840511
            [ent_pix] =>
            [\"images/events/STLUserFolks/IMG_2135.JPEG\",\"images/events/STLUserFolks/IMG_2136.JPEG\",\"images/events/STLUserFolks/IMG_2137.JPEG\",\"images/events/STLUserFolks/IMG_2140.JPEG\"]
            [amount] => 25
            [event_title] => New Pants
            [event_type] => photos
            [event_details] => Do these jeans make me look big?
        )
        [1] => Array (
            [id] => 1
            [user_id] => 1
            [username] => STLUserFolks
            [member_user] => Some.Guy
            [comment_text] => Wish I was there!
            [created_on] => 2020-07-10 10:45:42.809338
            [comment_id] => 19115a3e-87ca-410c-aade-c47122068bca
            [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
        )
        [2] => Array (
            [id] => 1
            [user_id] => 2
            [username] => STLUserFolks
            [member_user] => spiffy_user
            [comment_text] => Looks like an amazing time.
            [created_on] => 2020-07-10 15:09:05.275935
            [comment_id] => bfd4d4e3-1c88-4f03-936f-cd456dba6096
            [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
        )
    )
)
我需要能够遍历这些数组,以便将注释数组([1]及以上)应用于主数组[0]。 或者我需要[0]之后的顺序数组按如下方式嵌套:

Array (
    [0] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 7e0a2faa-43c8-4552-b0ec-c4d0fa6c00d1
            [event_on] => 2020-06-29 17:39:25.93432
            [ent_pix] =>
            [\"images/events/STLUserFolks/tammy1.jpeg\",\"images/events/STLUserFolks/tammy2.jpeg\",\"images/events/STLUserFolks/tammy3.jpeg\",\"images/events/STLUserFolks/tammy4.jpeg\",\"images/events/STLUserFolks/tammy5.jpeg\",\"images/events/STLUserFolks/tammy6.jpeg\"]
            [amount] => 20
            [event_title] => Fun on vacation with friends.
            [event_type] => mix
            [event_details] => Saw Great and interesting sites today!
        )
    )
    [1] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
            [event_on] => 2020-07-09 05:39:10.588842
            [ent_pix] =>
            [\"images/events/STLUserFolks/680.JPG\",\"images/events/STLUserFolks/681.JPG\",\"images/events/STLUserFolks/682.JPG\"]
            [amount] => 25
            [event_title] => Sexy Warm
            [event_type] => photos
            [event_details] => Feeling the sun on our faces.
            [user_comment] => array (
                [id] => 1
                [user_id] => 2
                [username] => STLUserFolks
                [member_user] => spiffy_user
                [comment_text] => Amazing! you guys are simply amazing!
                [created_on] => 2020-07-10 15:04:46.480001
                [comment_id] => c803294d-8483-43c9-a76b-4cba56795266
                [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
            )
        )
    )
    [2] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
            [event_on] => 2020-07-09 07:11:32.840511
            [ent_pix] =>
            [\"images/events/STLUserFolks/IMG_2135.JPEG\",\"images/events/STLUserFolks/IMG_2136.JPEG\",\"images/events/STLUserFolks/IMG_2137.JPEG\",\"images/events/STLUserFolks/IMG_2140.JPEG\"]
            [amount] => 25
            [event_title] => New Pants
            [event_type] => photos
            [event_details] => Do these jeans make me look big?
            [user_comments] => array (
                array (
                    [id] => 1
                    [user_id] => 1
                    [username] => STLUserFolks
                    [member_user] => Some.Guy
                    [comment_text] => Wish I was there!
                    [created_on] => 2020-07-10 10:45:42.809338
                    [comment_id] => 19115a3e-87ca-410c-aade-c47122068bca
                    [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                )
                array (
                    [id] => 1
                    [user_id] => 2
                    [username] => STLUserFolks
                    [member_user] => spiffy_user
                    [comment_text] => Looks like an amazing time.
                    [created_on] => 2020-07-10 15:09:05.275935
                    [comment_id] => bfd4d4e3-1c88-4f03-936f-cd456dba6096
                    [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                )
            )
        )
    )
)
这件事我已经睡了半个晚上了。任何帮助都将不胜感激。谢谢

@blahy-如果我想添加另一个嵌套数组,比如:

Array (
    [0] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 7e0a2faa-43c8-4552-b0ec-c4d0fa6c00d1
            [event_on] => 2020-06-29 17:39:25.93432
            [ent_pix] =>
            [\"images/events/STLUserFolks/tammy1.jpeg\",\"images/events/STLUserFolks/tammy2.jpeg\",\"images/events/STLUserFolks/tammy3.jpeg\",\"images/events/STLUserFolks/tammy4.jpeg\",\"images/events/STLUserFolks/tammy5.jpeg\",\"images/events/STLUserFolks/tammy6.jpeg\"]
            [amount] => 20
            [event_title] => Fun on vacation with friends.
            [event_type] => mix
            [event_details] => Saw Great and interesting sites today!
            [user_comments] => Array (
            )
            [user_likes] => Array (
                [like] => 0
                [not_like] => 1
                [event_id] => 7e0a2faa-43c8-4552-b0ec-c4d0fa6c00d1
                [like_id] => 40
            )
        )
    )
    [1] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
            [event_on] => 2020-07-09 05:39:10.588842
            [ent_pix] =>
            [\"images/events/STLUserFolks/680.JPG\",\"images/events/STLUserFolks/681.JPG\",\"images/events/STLUserFolks/682.JPG\"]
            [amount] => 25
            [event_title] => Sexy Warm
            [event_type] => photos
            [event_details] => Feeling the sun on our faces.
            [user_comment] => array (
                [0] => Array (
                    [id] => 1
                    [user_id] => 2
                    [username] => STLUserFolks
                    [member_user] => spiffy_user
                    [comment_text] => Amazing! you guys are simply amazing!
                    [created_on] => 2020-07-10 15:04:46.480001
                    [comment_id] => c803294d-8483-43c9-a76b-4cba56795266
                    [event_id] => debd6476-4f24-4d2c-9973-7c36d256079d
                    )
                )
            [user_likes] => Array (
                [0] => Array (
                    [like] => 5
                    [not_like] => 0
                    [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                    [like_id] => 42
                )
            )
        )
    )
    [2] => Array (
        [0] => Array (
            [id] => 1
            [username] => STLUserFolks
            [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
            [event_on] => 2020-07-09 07:11:32.840511
            [ent_pix] =>
            [\"images/events/STLUserFolks/IMG_2135.JPEG\",\"images/events/STLUserFolks/IMG_2136.JPEG\",\"images/events/STLUserFolks/IMG_2137.JPEG\",\"images/events/STLUserFolks/IMG_2140.JPEG\"]
            [amount] => 25
            [event_title] => New Pants
            [event_type] => photos
            [event_details] => Do these jeans make me look big?
            [user_comments] => 
                [0] => Array (
                    array (
                        [id] => 1
                        [user_id] => 1
                        [username] => STLUserFolks
                        [member_user] => Some.Guy
                        [comment_text] => Wish I was there!
                        [created_on] => 2020-07-10 10:45:42.809338
                        [comment_id] => 19115a3e-87ca-410c-aade-c47122068bca
                        [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                    )
                    array (
                        [id] => 1
                        [user_id] => 2
                        [username] => STLUserFolks
                        [member_user] => spiffy_user
                        [comment_text] => Looks like an amazing time.
                        [created_on] => 2020-07-10 15:09:05.275935
                        [comment_id] => bfd4d4e3-1c88-4f03-936f-cd456dba6096
                        [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                    )
                )
            [user_likes] => Array (
                [0] => Array (
                    [like] => 2
                    [not_like] => 0
                    [event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
                    [like_id] => 42
                )
            )
        )
    )
)

假设您提供的输入数据位于data.php中:

<?php

$data = include('data.php');

$result = [];
foreach ($data as $row) {
  $user = $row[0];

  foreach ($row as $k => $element) {
    if ($k === 0) {
      $user = $element;
      $user['user_comments'] = [];   
    } else {
      $user['user_comments'][] = $element;
    }
  }

  $result[] = $user;
}

var_dump($result);
这就是你想要的吗

与预期结果唯一不同的是,每一行都有“user\u comments”数组,该数组可以为空,与此属性相比,缺少一个或多个元素,或者被称为
user\u comment
user\u comments
。我相信这是更一致的,更容易使用编程,但它也可以很容易地调整到您发布的内容,如果需要的话

编辑关于评论之类的内容。 如果要同时填写用户注释和用户喜好,则必须检测某些数据是否为注释或喜好。我是这样做的:如果数据包含comment\u id,它就是一个comment,如果它有like\u id,它就是like。 这是一个简单的编辑附在下面。片段变成:

foreach ($row as $k => $element) {
    if ($k === 0) {
      $user = $element;
      $user['user_comments'] = [];
      $user['user_likes'] = [];
    } else if (isset($element['comment_id'])) {
      $user['user_comments'][] = $element;
    } else if (isset($element['like_id'])) {
      $user['user_likes'][] = $element;
    }
  }

以后,如果需要,您可以通过这种方式扩展它来处理不同的事件。

我使用
注释_text
键在给定线程的注释和非注释之间进行筛选,并将所有
用户注释
分组到主线程下。我使用
array\u map
将此筛选器应用于列表中的每个线程

$flatThreads = \\your initial value

$nestedThreads = array_map(function($thread){
  $notComments = array_filter($thread, function($thread_item){
    return !isset($thread_item["comment_text"]);
  });

  $comments = array_filter($thread, function($thread_item){
    return isset($thread_item["comment_text"]);
  });

  $mainItem = reset($notComments); //get first item that is not a comment
  $mainItem["user_comments"] = $comments;
  return $mainItem;
  
}, $flatThreads);

var_dump($nestedThreads); //what you requested

我在末尾添加了单独的部分。这应该是你需要的。
$flatThreads = \\your initial value

$nestedThreads = array_map(function($thread){
  $notComments = array_filter($thread, function($thread_item){
    return !isset($thread_item["comment_text"]);
  });

  $comments = array_filter($thread, function($thread_item){
    return isset($thread_item["comment_text"]);
  });

  $mainItem = reset($notComments); //get first item that is not a comment
  $mainItem["user_comments"] = $comments;
  return $mainItem;
  
}, $flatThreads);

var_dump($nestedThreads); //what you requested