dongshuo8756 2016-12-29 06:45
浏览 40
已采纳

将数组转换为另一种格式

The following code is a return of my function for display categories list.

My structure:

Parent_category -> Category -> Child_category

Now i combine child_category with category and add to category is_bold param.

Here's method:

public function categories(){
  $categories = self::buildTree(Category::get()->toArray());
  $cats = $categories;
  foreach($cats as $key=>$category){
    if(count($category['childs'])>0){
      foreach($category['childs'] as $key1=>$c){
        if(count($c['childs'])>0){
          $categories[$key]['childs'] = array_merge($categories[$key]['childs'], $c['childs']);
          unset($categories[$key]['childs'][$key1]['childs']);
          $categories[$key]['childs'][$key1]['is_bold']=1;
        }
      }
      $categories[$key]['childs'] = self::array_sort($categories[$key]['childs'], 'id', SORT_ASC);
    }
  }
  return response()->json(array('data' => $categories), 200);
}

Here's buildTree method:

public static function buildTree(array $elements, $parentId = null){
  $result = array();
  foreach ($elements as $element) {
      if($element['parent_id'] == $parentId) {
          $children = self::buildTree($elements, $element['id']);
          $element['childs'] = [];
          if ($children) $element['childs'] = $children;
          $result[$element['id']] = $element;
      }
  }
  return array_values($result);
}

Here's my return

"data": [
{
  "id": 1,
  "parent_id": null,
  "name": "tv",
  "icon": null,
  "slack": null,
  "childs": [
    {
      "id": 2,
      "parent_id": 1,
      "name": "tvs",
      "icon": null,
      "slack": null,
      "is_bold": 1
    },
    {
      "id": 3,
      "parent_id": 2,
      "name": "LED tvs",
      "icon": null,
      "slack": null,
      "childs": []
    },
    {
      "id": 4,
      "parent_id": 2,
      "name": "4K tvs",
      "icon": null,
      "slack": null,
      "childs": []
    },
    {
      "id": 5,
      "parent_id": 1,
      "name": "videos",
      "icon": null,
      "slack": null,
      "is_bold": 1
    },
    {
      "id": 6,
      "parent_id": 5,
      "name": "home cinema",
      "icon": null,
      "slack": null,
      "childs": []
    },
    {
      "id": 7,
      "parent_id": 5,
      "name": "videoplayers",
      "icon": null,
      "slack": null,
      "childs": []
    }]
 }]

But now I want to return data like this:

{
  "id": 1,
  "parent_id": null,
  "name": "Телевизоры, аудио, видео",
  "icon": null,
  "slack": null,
  "childs": [
   "televizory": [ {
      "id": 2,
      "parent_id": 1,
      "name": "Телевизоры",
      "icon": null,
      "slack": null,
      "is_bold": 1
    },
    {
      "id": 3,
      "parent_id": 2,
      "name": "LED телевизоры",
      "icon": null,
      "slack": null,
   },
    {
      "id": 4,
      "parent_id": 2,
      "name": "4K Телевизоры",
      "icon": null,
      "slack": null,
   }],
  video": [  {
      "id": 5,
      "parent_id": 1,
      "name": "Домашнее видео, аудио",
      "icon": null,
      "slack": null,
      "is_bold": 1
    },
    {
      "id": 6,
      "parent_id": 5,
      "name": "Домашние кинотеатры",
      "icon": null,
      "slack": null,
    },
    {
      "id": 7,
      "parent_id": 5,
      "name": "Видеоплееры",
      "icon": null,
      "slack": null,
   },
    {
      "id": 8,
      "parent_id": 5,
      "name": "Проекторы",
      "icon": null,
      "slack": null,
    },
    {
      "id": 9,
      "parent_id": 5,
      "name": "Акустика Hi-Fi",
      "icon": null,
      "slack": null,
    },
    {
      "id": 10,
      "parent_id": 5,
      "name": "Аксессуары",
      "icon": null,
      "slack": null,
    }]
  • 写回答

1条回答 默认 最新

  • dqpwdai095465 2016-12-29 07:01
    关注

    You could make use of Laravel's Collection class.

    Simply replace

    if ($children) $element['childs'] = $children;
    

    with

    if ($children)  {
      $children = new \Illuminate\Support\Collection($children);
      $element['childs'] = $children->keyBy('name')->toArray();
    }
    

    The keyBy() method replaces the keys of collection's elements with the value of selected attribute of those elements - name in your case.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化