【问题标题】:How to get a value of multidimensional associative array from Laravel collection如何从 Laravel 集合中获取多维关联数组的值
【发布时间】:2018-04-03 19:12:28
【问题描述】:

我从 Laravel 应用程序返回一个集合,看起来像这样。

[
{
"id": 1,
"name": "Business",
"created_at": "2017-10-16 15:11:47",
"updated_at": "2017-10-16 15:11:47",
"sub_categories": [
    {
    "id": 1,
    "name": "Accounting",
    "category_id": 1,
    "created_at": "2017-10-16 15:12:41",
    "updated_at": "2017-10-16 15:12:41"
    },
    {
    "id": 2,
    "name": "Business Information Systems",
    "category_id": 1,
    "created_at": "2017-10-16 15:12:41",
    "updated_at": "2017-10-16 15:12:41"
    },
    {
    "id": 5,
    "name": "Business Law",
    "category_id": 1,
    "created_at": "2017-10-22 15:48:31",
    "updated_at": "2017-10-22 15:48:31"
    },
    {
    "id": 9,
    "name": "Business Policy and Strategy",
    "category_id": 1,
    "created_at": "2017-10-22 15:49:20",
    "updated_at": "2017-10-22 15:49:20"
    },
    {
    "id": 11,
    "name": "Business Research",
    "category_id": 1,
    "created_at": "2017-10-22 15:49:33",
    "updated_at": "2017-10-22 15:49:33"
    },
    {
    "id": 4,
    "name": "Finance",
    "category_id": 1,
    "created_at": "2017-10-16 15:13:04",
    "updated_at": "2017-10-16 15:13:04"
    },
    {
    "id": 6,
    "name": "Management",
    "category_id": 1,
    "created_at": "2017-10-22 15:48:31",
    "updated_at": "2017-10-22 15:48:31"
    },
    {
    "id": 8,
    "name": "Managerial Skills & Communication",
    "category_id": 1,
    "created_at": "2017-10-22 15:48:58",
    "updated_at": "2017-10-22 15:48:58"
    },
    {
    "id": 10,
    "name": "Marketing",
    "category_id": 1,
    "created_at": "2017-10-22 15:49:20",
    "updated_at": "2017-10-22 15:49:20"
    },
    {
    "id": 3,
    "name": "Microeconomics",
    "category_id": 1,
    "created_at": "2017-10-16 15:13:04",
    "updated_at": "2017-10-16 15:13:04"
    },
    {
    "id": 7,
    "name": "Organisational Behaviour",
    "category_id": 1,
    "created_at": "2017-10-22 15:48:58",
    "updated_at": "2017-10-22 15:48:58"
    }
]
},
{
"id": 2,
"name": "Engineering",
"created_at": "2017-10-16 15:11:47",
"updated_at": "2017-10-16 15:11:47",
"sub_categories": [
{
    "id": 12,
    "name": "Aerospace Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:46:57",
    "updated_at": "2017-10-22 16:46:57"
    },
    {
    "id": 13,
    "name": "Automotive Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:46:57",
    "updated_at": "2017-10-22 16:46:57"
    },
    {
    "id": 14,
    "name": "Civil Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:47:38",
    "updated_at": "2017-10-22 16:47:38"
    },
    {
    "id": 15,
    "name": "Communication Systems",
    "category_id": 2,
    "created_at": "2017-10-22 16:47:38",
    "updated_at": "2017-10-22 16:47:38"
    },
    {
    "id": 16,
    "name": "Computer and Internet Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:48:38",
    "updated_at": "2017-10-22 16:48:38"
    },
    {
    "id": 17,
    "name": "Electrical and Electronic Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:48:38",
    "updated_at": "2017-10-22 16:48:38"
    },
    {
    "id": 18,
    "name": "Mechanical Engineering",
    "category_id": 2,
    "created_at": "2017-10-22 16:48:50",
    "updated_at": "2017-10-22 16:48:50"
    }
]
},
{
    "id": 3,
    "name": "Education",
    "created_at": "2017-10-22 15:05:51",
    "updated_at": "2017-10-22 15:05:51",
    "sub_categories": []
},
{
    "id": 4,
    "name": "Health Sciences",
    "created_at": "2017-10-22 15:05:51",
    "updated_at": "2017-10-22 15:05:51",
    "sub_categories": []
},
{
    "id": 5,
    "name": "Science",
    "created_at": "2017-10-22 15:06:26",
    "updated_at": "2017-10-22 15:06:26",
    "sub_categories": []
},
{
    "id": 6,
    "name": "Humanities",
    "created_at": "2017-10-22 15:06:26",
    "updated_at": "2017-10-22 15:06:26",
    "sub_categories": []
},
{
    "id": 7,
    "name": "Social Sciences",
    "created_at": "2017-10-22 15:06:43",
    "updated_at": "2017-10-22 15:06:43",
    "sub_categories": []
},
{
    "id": 8,
    "name": "Medicine",
    "created_at": "2017-10-22 15:06:43",
    "updated_at": "2017-10-22 15:06:43",
    "sub_categories": []
}
]

它基本上是一个带有主菜单链接和子链接的动态菜单。现在的问题是我想从我的控制器而不是我的blade file 访问sub_categories 的数组。我知道在刀片中我可以使用点“。”符号。

这是我的控制器的样子:

<?php

namespace App\Http\Controllers;

use App;
use App\Category;
use App\SubCategory;
use Illuminate\Http\Request;

class SeriesController extends Controller
{
    public function getSeries()
    {

        $categories = Category::with(['SubCategories'])->get();

        return $categories;

    }
}

到目前为止,我尝试过这是我尝试过的

1) $categories[0]["SubCategories"]

2) $categories[0]->SubCategories

【问题讨论】:

  • 使用点.操作符
  • 向我们展示您的代码!
  • 我将集合存储在一个名为“$categories”的变量中,然后我尝试通过执行$sub_categories = $categories[0]["sub_categories"] 访问“sub_categories”值,然后我尝试使用'-&gt;' 像这样$sub_categories = $categories[0]-&gt;sub_categories
  • @JulianTabona 提出了这个问题。
  • @mega6382 注意到,让我这样做

标签: php arrays laravel


【解决方案1】:

问题在于$categories[0] => 获取第一个可以使用first() 的元素,如下所示:

$sub_categories = $categories->first()->subCategories

然后你可以遍历子类别:

foreach ($sub_categories  as $sub_category ) {
    // sub_category->name;
}

如果子类别存在或不这样,您可以添加测试

foreach ($categories as $category ) {
    if(isset($category->subCategories) && $category->subCategories->count()>0) {
        foreach ($category->subCategories as $sub_category ) {
            echo 'category name : '. $category->name .' has sub cat name : '. $sub_category->name;
        }
    }
}

【讨论】:

  • 我希望这会奏效。当我返回$categories-&gt;first() 时,我肯定会得到第一个元素,但是当我返回$categories-&gt;first()-&gt;sub_categories 时,我会得到一个空白屏幕。
  • 试试$categories-&gt;first()["sub_categories"],第一个元素有子类别吗?
  • 这很奇怪,我试过$categories-&gt;first()-&gt;name,它有效,我试过$categories-&gt;first()-&gt;created_at$categories-&gt;first()-&gt;updated_at,它们都有效,但$categories-&gt;first()-&gt;sub_categories 什么也没返回……有什么特殊规则吗我们失踪了?
  • 我认为是因为第一个类别没有子类别!试试dd($categories-&gt;first()); 看看!!
  • 我正在尝试粘贴 $categories 结果,但评论编辑器有字符限制,我该如何发送给您?抱歉,使用 stackoverflow 还是新手
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多