我有一个名为get_product_list的laravel API,它接收一些参数,然后使用php内置函数array_filter过滤所有产品并最后返回它们。类似于下面的代码。
my_service:
privileged: true
我这样在axios中调用此API
public function get_product_list(Request $request)
{
//validations
//some code
$all_products = NULL ;
//getting all products in an array
$all_products = $this->get_all_products();
//applying filters
$all_products = array_filter($all_products, function($product) use($request){
$category_flag = true;
if($request->filled('category_id')){
$category_flag = ( $request->category_id == $product['main']->category_id);
}
return $category_flag;
});
return response()->json([
'status' => TRUE,
'products' => $all_products
],200);
}
问题是当我不将category_id传递给API时,我会收到一个数组,但是当我将其传递给API时,我会收到一个对象而不是数组。
我的代码有什么问题?
我不想在axios中将接收到的对象转换为数组,我希望API给我这个数组。
答案 0 :(得分:0)
array_filter()
的问题在于它维护密钥。
例如,如果您有一个包含5个项目的数组并过滤出索引0和2,则最终得到
[
1 => ...,
3 => ...,
4 => ...
]
json_encode()
在这种情况下将创建JSON 对象,因为它看不到平面数组。
简单的解决方案是使用array_values()
重新索引数组,例如
return response()->json([
'status' => TRUE,
'products' => array_values($all_products)
], 200);