在 Laravel 中将二维数组转换为 json 对象

Posted

技术标签:

【中文标题】在 Laravel 中将二维数组转换为 json 对象【英文标题】:Convert two dimentional array into the json object in Laravel 【发布时间】:2021-08-29 04:50:57 【问题描述】:

我正在将二维数组转换为 JSON 对象。

现在我的控制器返回这个输出:

[
    [
        
            "id": 1,
            "title": "V1",
            "project_id": 1
        
    ],
    []
]

想把它转换成这样:

[
  
    "id": 1,
    "name": "Laravel"
  ,
  
    "id": 2,
    "name": "Wordpress"
  
]

我的控制器代码:

$user = auth()->user();
$projectVersions = array();

foreach($user->projects as $project)

    $projectId = $project->pivot->project_id;
    $projectVersions[] = Version::where('project_id', $projectId)
        ->where('created_by', $user->id)
        ->get();


return $projectVersions;

当我使用@John Lobo 建议的以下代码时,它会返回以下输出:


  "id": 2,
  "name": "Hadayat Niazi",
  "email": "niazicr801@gmail.com",
  "is_admin": 0,
  "email_verified_at": null,
  "created_at": "2021-06-11T15:13:00.000000Z",
  "updated_at": "2021-06-11T15:13:00.000000Z",
  "projects": [
    
      "id": 1,
      "name": "Laravel",
      "pivot": 
        "user_id": 2,
        "project_id": 1
      ,
      "versions": [
        
          "id": 1,
          "title": "V1"
        
      ]
    
  ]

显示用户项目和版本:

我再次更新@John Lobo 的代码,他想查看输出

$user = User::with(['projects', 'projects.versions'])
    ->find(auth()->user()->id);

$result = $user->projects->map(function ($project) 
    return [
        $project->versions,
    ];
);

return $result;

输出代码

[
    [
        [
            
                "id": 1,
                "title": "V1",
                "project_id": 1,
                "version": "1.22",
                "created_by": 2,
                "is_publish": 0,
                "feature": "<b>In this ipdate asdsdasd</b>",
                "bug_fix": "<p><b>sdfdffffffffff</b></p>",
                "created_at": "2021-06-12T08:08:21.000000Z",
                "updated_at": "2021-06-12T08:08:21.000000Z"
            ,
            
                "id": 2,
                "title": "v2",
                "project_id": 1,
                "version": "2.12",
                "created_by": 2,
                "is_publish": 0,
                "feature": "adsdasdsadas",
                "bug_fix": "sddasdas",
                "created_at": null,
                "updated_at": null
            
        ]
    ],
    [
        []
    ]
]

【问题讨论】:

显示控制器代码 您的回复中是否使用了json_encode() 能发一下项目模型吗 这条线是获取多个数据$projectVersions[] = Version::where('id', $projectId)-&gt;get() ;还是你想要单行? 您想要项目的版本还是只需要版本?您的模型也会有所帮助 【参考方案1】:

在控制器中,您可以执行以下操作。如果您在名为版本的项目模型中有关系

  $projectVersions=User::with(['projects','projects.version'])->find(auth()->user()->id);
    
  return $projectVersions->projects;

我相信项目模型有以下关系

public function version()

return $this->hasMany(Version::class);

更新

$user=User::with(['projects','projects.versions'])->find(auth()->user()->id);

    $result = $user->projects->map(function ($project) 

        return $project->versions;
    );

 dd($result);

【讨论】:

它正在工作,但它正在返回所有用户及其项目及其版本,我不想要这些。我只想显示记录的用户项目及其版本。 它没有得到它应该是第一个()。它是我的错误 你也可以这样做 $projectVersions=User::with(['projects','projects.version'])->find(auth()->user()->id) ; 它正在工作,但我只想返回版本,因为我需要将它传递给 laravel yajra 数据表。 你能显示这个查询返回什么以及你期望的结果吗【参考方案2】:

像下面这样使用

$json = json_encode($responseOfController);
echo "<pre>";print_r($json);die;

【讨论】:

您能分享一下您收到的回复吗?

以上是关于在 Laravel 中将二维数组转换为 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

无法在laravel中将数组数组转换为没有索引的对象数组

Laravel 雄辩不更新 JSON 列:数组到字符串的转换

在 Laravel api 中将字符串转换为 json

在 Laravel 中将数组转换为集合

如何在 Scala 中将 RDD 转换为二维数组?

在laravel中将对象转换为数组[重复]