为啥使用 unset() 函数将数组转换为对象?
Posted
技术标签:
【中文标题】为啥使用 unset() 函数将数组转换为对象?【英文标题】: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 没关系..这只是一个样本..
【参考方案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...
【讨论】:
以上是关于为啥使用 unset() 函数将数组转换为对象?的主要内容,如果未能解决你的问题,请参考以下文章