【问题标题】:Why using unset() function cast the array to object?为什么使用 unset() 函数将数组转换为对象?
【发布时间】:2021-09-23 09:38:53
【问题描述】:

这是我的代码:

return ApiResponse::Json(200, '', ['categories' => $categories], 200);

这是结果的截图:

现在,我需要根据特定逻辑取消设置 categories 集合中的项目。所以我写了这个循环:

foreach ($categories as $key => $category) {
    if ($category->BusinessSubCategory->isEmpty())
          unset($categories[0]);
}

return ApiResponse::Json(200, '', ['categories' => $categories], 200);

这是我的新结果:(被强制转换为对象)

嗯..怎么了?取消设置某些项目后如何保持旧结构?

【问题讨论】:

  • 不应该是unset($categories[$key]);吗?
  • @AndreaOlivato 没关系..这只是一个样本..

标签: php arrays laravel collections


【解决方案1】:

unset() 方法不会改变你的类型。

您的“数组”不是数组而是集合。

试试:

foreach ($categories as $key => $category) {
    if ($category->BusinessSubCategory->isEmpty()) {
        unset($categories[0]);
        break;
    }
}
$categories = array_values($categories->toArray());

return ApiResponse::Json(200, '', ['categories' => $categories], 200);

请注意,如果您要取消设置相同的元素,您应该在这样做之后中断循环。

【讨论】:

  • array_values(): 参数 #1 ($array) 必须是数组类型,Illuminate\\Database\\Eloquent\\Collection given"
  • 所以你的类型甚至不是一个数组。
  • 嗯,我知道..它是进入循环之前的一个集合,一个对象将在循环之后被输出
  • 我换了帖子,试试这个解决方案。
  • 应该这样写:array_values($categories->toArray());,因为它不是静态的
【解决方案2】:

试试这个:

foreach ($categories as $key => $category) {
    if ($category->BusinessSubCategory->isEmpty())
          unset($categories[$key]);

}

$categories = array_slice($categories->toArray(), 0, count($categories));

return ApiResponse::Json(200, '', ['categories' => $categories], 200);

【讨论】:

    【解决方案3】:

    看起来你正在使用关系,所以你可以不用循环

    $category=Category::with('BusinessSubCategory')
                         ->has('BusinessSubCategory')
                         ->get();
    

    或使用集合

    $result= $categories->filter(function ($category){
        
               return  $category->BusinessSubCategory->isNotEmpty();
            });
    
    dd($result->values()->toArray());
    

    如果$categories 不是集合,则使用collect($categories)->filter...

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2020-08-24
      • 2019-04-14
      • 2021-05-03
      • 2018-12-04
      • 2021-06-16
      相关资源
      最近更新 更多