如何在laravel中将两级数组转换为一个级别数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel中将两级数组转换为一个级别数组相关的知识,希望对你有一定的参考价值。
我有一个数组数据来自数据库。而我的“数组到xml转换器”只能转换一个级别的数组。
基本上我想将我的数据库表转换为xml文件。
public function downloadXml()
{
$fields = ['created_at', 'updated_at'];
$products = Product::where('user_id', auth()->id())
->exclude($fields)->get()->toArray();// this is returnin array of array like [0 => [], 1 => []]
$products = array_collapse($products);
$result = ArrayToXml::convert($product, 'product');
}
问题是array_collapse方法修剪了一个级别的数组,但只给我最后一个数组而不是所有数组。我怎样才能获得所有阵列?任何帮助赞赏..
编辑:当dd(Product::where('user_id', auth()->id())
->exclude($fields)->get()->toArray();
);
Output1 =数组:2 [▼0 =>数组:18 [▶] 1 =>数组:18 [▶]]
当dd(array_collapse(Product::where('user_id', auth()->id())
->exclude($fields)->get()->toArray());
)
Output2 =数组:18 [▶]
我需要像output2这样的东西,但问题是输出2假设只有一个产品,但实际上有两个产品。
答案
使用Eloquent(Laravel ORM)执行数据库查询时,结果将在Collection内返回(每行一个)。这是你提到的“第一级”阵列。
不幸的是,需要一个“二级”数组来为每一行定义属性(以及其他属性)。
所以你要么:
- 扩展您的ArrayToXml转换器以使用Laravel集合(即打印xml标记,循环遍历元素并打印关闭的xml标记)
- 将xml转换器拆分为两部分:xml标记打开和关闭的包装器以及映射函数内的当前ArrayToXml :: convert。
让我举例说明后者:
public function downloadXml()
{
return Product::where('user_id', auth()->id())
->get()
->map(function (Product $product){
return ArrayToXml::convert($product->only('id', 'user_id'), 'product');
})
}
以上是关于如何在laravel中将两级数组转换为一个级别数组的主要内容,如果未能解决你的问题,请参考以下文章