如何在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内返回(每行一个)。这是你提到的“第一级”阵列。

不幸的是,需要一个“二级”数组来为每一行定义属性(以及其他属性)。

所以你要么:

  1. 扩展您的ArrayToXml转换器以使用Laravel集合(即打印xml标记,循环遍历元素并打印关闭的xml标记)
  2. 将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中将两级数组转换为一个级别数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中将数组转换为集合

在laravel中将对象转换为数组[重复]

在laravel中将对象转换为数组[重复]

无法在laravel中将数组数组转换为没有索引的对象数组

在Laravel中将数组转换为集合

在 laravel 控制器中将数组转换为 json