如何为数组-php中的每个索引添加一个新项目?

Posted

技术标签:

【中文标题】如何为数组-php中的每个索引添加一个新项目?【英文标题】:How to add a new item to every index in the array -php? 【发布时间】:2022-01-20 08:49:35 【问题描述】:

var_export($res) 是一个数组,如下所示。

array(0 =>(object) array('user' => NULL,
                        'courseId' => 18,),
      1 =>(object) array('user' =>(object) array('id' => 1,
                                                'name' => 'admin',
                                                'files' => NULL,),
                        'courseId' => 1,),
    )

在此数组中的每个索引处,我需要使用courseId 计算count,并将一个名为count 的新项目添加到每个索引。我使用了下面的代码。并且预期的最终结果是一个对象数组,而不是对象的对象。

$res=json_decode($response);
foreach ($res as $key )                    
    $count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
    $res['count'] = $count; 

return response()->json(['data' => $res,'statusCode' => 200], 200);

上面的代码显示了下面的数据。它将count 添加为数组中的新索引,而不是将其作为新项添加到数组的每个索引中。此外,它以对象对象的形式返回结果。我该如何解决这个问题?

    
        "0": 
            "user": null,
            "courseId": 18
        ,
        "1": 
            "user": 
                "id": 1,
                "name": "admin",
                "files": null
            ,
            "courseId": 1
        ,
        "count": 1
    

预期的最终结果

  [
       
            "user": null,
            "courseId": 18,
            "count": 20
        ,
        
            "user": 
                "id": 1,
                "name": "admin",
                "files": null
            ,
            "courseId": 1,
            "count": 10
        
  ]

【问题讨论】:

【参考方案1】:

在您的 foreach 循环中,$key 是每个包含 courseId 的对象。

不要将count 添加到$res,而是将其添加到$key,如下所示:

foreach ($res as &$key )                    
    $count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
    $key->count = $count; // set it to $key instead of $res

如果您希望结果是数组而不是对象,请将 true 作为第二个参数传递给 json_decode,如下所示:

$res = json_decode($response, true); // associative array instead of object

然后编辑 foreach 以将其作为数组处理:

foreach ($res as $key )                    
    $count = MyCourse::where('course_id', $key['courseId'])->distinct('student_id')->count();
    $key['count'] = $count; // set it to $key instead of $res

【讨论】:

这样分配时有效 - $key->count = $count; 。但它只输出 1 个数组作为 "user": "id": 1, "name": "admin","files": null,"courseId": 1,"count": 1 确保你仍然在return response()->json(['data' => $res,'statusCode' => 200], 200);中返回$res【参考方案2】:

在您的情况下,您想为 $key 而不是 $res 设置计数字段

您的 foreach 循环应如下所示:

foreach ($res as $key )                    
    $count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
    $key->count = $count; 

这将输出:

    
        "0": 
            "user": null,
            "courseId": 18,
            "count": 20
        ,
        "1": 
            "user": 
                "id": 1,
                "name": "admin",
                "files": null
            ,
            "courseId": 1,
            "count": 10
        
    

【讨论】:

这给了我错误Cannot use object of type stdClass as array 在线$key['count'] = $count; 糟糕,抱歉,我会编辑我的答案。您需要使用 -> 将计数称为对象字段 只有foreach ($res as &$key)才能正常工作

以上是关于如何为数组-php中的每个索引添加一个新项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何为php中的任何数组提供索引

PySpark:如何为数组列中的每个元素添加值?

如何为javascript数组中的每个对象动态添加属性

如何为数组字段中的指针添加权限指针?

如何为列表中的每个项目添加一个布尔值?

如何为 QComboBox 中的每个项目添加价值 [重复]