【问题标题】:json array containing multiple objects包含多个对象的json数组
【发布时间】:2022-01-12 05:47:33
【问题描述】:

我想在每个数组中获取多个对象,但我的代码显示单个对象要做什么。 这是我的 PHP 代码,我如何添加另一个循环来获取多个对象

foreach($row as $row){
$keys = $row['Cat_name'];
$output[$keys] = [];  //Creating key 
array_push($output[$keys],$row);
}
echo json_encode($output);

这是显示单个对象的结果

{
"Dogs": [
    {
        "id": "127",
        "thumb_path": "/VideoWallpaper/other/other17.jpg",
        "likes": "59",
        "Downloads": "88",
        "Cat_name": "Dogs"
    }
],
"Others": [
    {
        "id": "127",
        "thumb_path": "/VideoWallpaper/other/other17.jpg",
        "likes": "59",
        "Downloads": "88",
        "Cat_name": "Others"
    }
]
}

【问题讨论】:

标签: php json


【解决方案1】:
$output[$keys] = [];  //Creating key

您每次都将一个新的空数组分配给$output[$keys],这意味着您在当前循环迭代中推入该数组的内容将在下一次迭代中被丢弃,$keys 再次具有相同的值。

您无需显式初始化进一步的数组“维度”来将数据存储到其中。只需将$output = []; 初始化为一个空数组before 循环;那么您可以通过简单的分配在任何级别添加任何内容,无论该级别/路径/您想要调用的任何内容是否已经存在 - PHP 将在必要时创建它。

替换这两行

$output[$keys] = [];  //Creating key 
array_push($output[$keys],$row);

只有

$output[$keys][] = $row;

(为什么$keys 以复数开头?这是一个单一的值,而不是多个值。而且“辅助变量”并不是真正需要开始的 - 你可以替换 whole 循环体,只有$output[$row['Cat_name']][] = $row; - 如果您想要;如果带有辅助变量的其他版本对您来说更具可读性,那也没关系。)


还有一件事,

foreach($row as $row){

你应该避免对两个不同的东西使用相同的变量名。它不会直接影响这里 foreach 循环内部发生的事情 - 但它会改变 row 在循环之后包含的内容,因此如果您之后仍需要访问原始数据数组,您应该不要在此处覆盖它。

【讨论】:

  • 我正在分配要记住的键...
  • 我需要像 { "response": [ { "category_id": "1", "name": "Cat", "wallpapers": [ { "start": "2021-12- 01 00:35:00", "episode_num": "" }, { "start": "2021-12-01 00:40:00", "episode_num": "" }, ] } } ] }
  • 您甚至还没有向我们展示正确的输入数据,这可能会导致任何这样的结果。例如,那些start 值来自哪里? cmets 已经要求您提供正确的minimal reproducible example 问题。
  • 这里是代码foreach($row as $row){ $key = $row['cat_id']; $keys = $row['Cat_name']; $output['response'][$keys][ ]= $row; $res= array($output); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多