php中的数组格式(使用laravel框架)

php中的数组格式(使用laravel框架),php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在尝试用php格式化数组。它不会以预期的json格式返回。以下是详细信息 $categories = category::where('cat_flag','Y')->pluck('cat_name as category_name')->toArray(); $items = item::leftjoin('categories','items.cat_id' ,'=', 'categories.id') ->where('it

我正在尝试用php格式化数组。它不会以预期的json格式返回。以下是详细信息

$categories = category::where('cat_flag','Y')->pluck('cat_name as category_name')->toArray();
$items = item::leftjoin('categories','items.cat_id' ,'=', 'categories.id')
                      ->where('item_flag','Y')
                      ->get([
                            'item_name',
                            'items.cat_id as category_id',
                            'cat_name as category_name'
                        ])->toArray();

        $formatedArray = [];
        foreach ($categories as $category) {
            foreach ($items as $item) {
                if ($item['category_name'] == $category) {
                    $formatedArray['cat_name'] = $category;
                    $formatedArray['datas'][] = $item;
                }
            }
        }
我的预期输出如下。但数组格式部分存在逻辑错误。我不知道如何正确格式化。提前谢谢

       [
         {
           "cat_name" : "food",
           "datas" : [
                {
                  "item_name": "item2",
                  "category_id": "1"
                },
                {
                  "item_name": "item4",
                  "category_id": "1"
                }
             ]
           },
           {
           "cat_name" : "drinks",
           "datas" : [
                {
                  "item_name": "coca cola",
                  "category_id": "4"
                }
             ]
           }
        ]
但我的输出显示为。所有项目都属于同一类别

  {
"cat_name": "cat4",
"datas": [
    {
        "item_name": "item2",
        "category_id": "1"
    },
    {
        "item_name": "item22",
        "category_id": "2"
    }
 ]
}

嘿,哥们,试试这个,你们正在比较字符串和对象

foreach ($categories as $category) {
        foreach ($items as $item) {
            if ($item['category_name'] == $category) {
                if(!empty($formatedArray)){
                  foreach(formatedArray as $array){
                     if(!empty($array) && $array['cat_name']  == $category){
                          array_push($formatedArray['datas'], $item)
                     }else{
                          $newArray = [];
                          $newArray['cat_name'] = $category;
                          $newArray['datas'][] = $item;
                          array_push($formatedArray, $newArray);
                     }
                  }
                }else{
                  $formatedArray['cat_name'] = $category;
                  $formatedArray['datas'][] = $item
                }
            }
        }
    }

嘿,哥们,试试这个,你们正在比较字符串和对象

foreach ($categories as $category) {
        foreach ($items as $item) {
            if ($item['category_name'] == $category) {
                if(!empty($formatedArray)){
                  foreach(formatedArray as $array){
                     if(!empty($array) && $array['cat_name']  == $category){
                          array_push($formatedArray['datas'], $item)
                     }else{
                          $newArray = [];
                          $newArray['cat_name'] = $category;
                          $newArray['datas'][] = $item;
                          array_push($formatedArray, $newArray);
                     }
                  }
                }else{
                  $formatedArray['cat_name'] = $category;
                  $formatedArray['datas'][] = $item
                }
            }
        }
    }

我认为以下代码就是问题所在: 在每次迭代中,$formattedArray内容将被替换为新值

$formatedArray = [];
        foreach ($categories as $category) {
            foreach ($items as $item) {
                if ($item['category_name'] == $category) {
                    $formatedArray['cat_name'] = $category;
                    $formatedArray['datas'][] = $item;
                }
            }
        }
将上述内容替换为:

$formatedArray = $thisArray = [];
        foreach ($categories as $category) {
            foreach ($items as $item) {
                if ($item['category_name'] == $category) {
                    $thisArray['cat_name'] = $category;
                    $thisArray['datas'][] = $item;
                    $formatedArray[] = $thisArray;
                    $thisArray = [];
                }
            }
        }

我认为以下代码就是问题所在: 在每次迭代中,$formattedArray内容将被替换为新值

$formatedArray = [];
        foreach ($categories as $category) {
            foreach ($items as $item) {
                if ($item['category_name'] == $category) {
                    $formatedArray['cat_name'] = $category;
                    $formatedArray['datas'][] = $item;
                }
            }
        }
将上述内容替换为:

$formatedArray = $thisArray = [];
        foreach ($categories as $category) {
            foreach ($items as $item) {
                if ($item['category_name'] == $category) {
                    $thisArray['cat_name'] = $category;
                    $thisArray['datas'][] = $item;
                    $formatedArray[] = $thisArray;
                    $thisArray = [];
                }
            }
        }


格式化错误是什么?显示时没有错误。我无法将“cat_name”:“food”设置为该对象。它只设定了一次。但我想说的是格式。谢谢回复,如果你应该$category->category\u name而不仅仅是$category,那可能是posint格式错误是什么?显示时没有错误。我无法将“cat_name”:“food”设置为该对象。它只设定了一次。但我想说的是格式。感谢回复如果你应该$category->category\u name而不仅仅是$category,那可能是posin谢谢回复。这就是为什么我将数组转换成$category['category_name']。但是它显示了非法的字符串偏移量“category_name”@Mithun更新了看这个你的意思是这样吗谢谢你给我时间。但同样非法的字符串偏移量“category_name”您能给我展示一下数据库中两个表$Categories=array:2[0=>“cat2”1=>“cat4”]的几个示例吗?谢谢您的回复。这就是为什么我将数组转换成$category['category_name']。但是它显示了非法的字符串偏移量“category_name”@Mithun更新了看这个你的意思是这样吗谢谢你给我时间。但同样非法的字符串偏移量“category_name”您能给我展示一下数据库中两个表$Categories=array:2[0=>“cat2”1=>“cat4”]的几个示例吗?谢谢您的回复。但它将同一类别划分为多个类别。我需要相同类别下的相同项目{“类别名称”:“cat2”,“数据”:[{“项目名称”:“项目2”,“类别id”:“1}]},{“类别名称”:“cat2”,“数据”:[{“项目名称”:“项目22”,“类别id”:“1”}]},但我需要像下面这样的评论{“catu name”:“cat2”,“datas”:[{“item_name”:“item2”,“category_id”:“1”},{“item_name”:“item22”,“category_id”:“1”}]}谢谢回复。但它将同一类别划分为多个类别。我需要相同类别下的相同项目{“类别名称”:“cat2”,“数据”:[{“项目名称”:“项目2”,“类别id”:“1}]},{“类别名称”:“cat2”,“数据”:[{“项目名称”:“项目22”,“类别id”:“1”}]},但我需要下面的注释{“cat_name”:“cat2”,“datas”:[{“item_name”:“item2”,“category_id”:“1”},{“item_name”:“item22”,“category_id”:“1”}]}