当前位置: 首页 > 面试题库 >

Laravel集合将数组转换为对象

谷梁宜
2023-03-14
问题内容

如果我运行$collection->filter(myFilter),Laravel会执行以下烦人的事情,即向集合中的每个模型添加键,如下所示:

{
    "4": {
        "myObject": "data"
    },
    "7": {
        "myObject": "data"
    }
}

我如何摆脱“ 4”和“ 7”,所以它是我的对象的数组?

我运行的代码是:

$obj = Cars::with('brand')->orderBy('id')->get();

return $obj->filter(function($value, $key)
{
    return $value->display == true;
});

问题答案:

问题在于该filter()方法不会为基础集合数组重新设置密钥。因此,Collection仍表示一个数组,只是您的数组看起来像这样:

[
    4 => Object4,
    7 => Object7,
]

尽管这在PHP中是一个非常有效的数组,但在JSON中却不是一个合适的数组。由于无法将其表示为JSON中的数组,因此将其转换为JSON中的对象。

为了使它正确地表示为JSON中的数组,您只需要重新输入Collection数组即可。为此的正确方法是values()方法。它所做的只是array_values在基础数组上调用。这将使上面的数组变成:

[
    0 => Object4,
    1 => Object7,
]

现在,这是JSON可以理解的适当数字索引数组,它将被视为数组而不是对象。

虽然flatten可能适用于此特定情况(您的集合是Eloquent模型的集合),但它实际上不是正确的方法,并且可能导致意想不到的后果。此外,它将执行很多不需要的额外逻辑。最好的选择是对要达到的目标使用正确的方法,那就是该values()方法。

$obj = Cars::with('brand')->orderBy('id')->get();

return $obj->filter(function($value, $key)
    {
        return $value->display == true;
    })
    ->values();


 类似资料:
  • 现有两个名为getDetails(…)的方法 。一个需要至少一个必需参数,另一个需要一个集合(不验证集合的内容/大小)。 问题是集合有时会作为空传递,并且根据我的业务案例,我总是期望至少传递一个值。因此,我需要将该方法设为私有,它接受集合。 我计划将下面的方法作用域设置为private,这样调用者就不会使用零属性调用此方法。 调用方方法之一是将集合对象传递给下面的getDetails, id.ge

  • 我想在Scala中映射Java数组。对于普通的Java集合,我知道我可以使用 但是,对于阵列,此转换不起作用: 那么,如何将Java数组转换为Scala集合、iterable或可以映射的对象呢?

  • Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么

  • 运行代码时,出现以下错误: 导致的代码是: 但当我这样做时: 我得到以下输出: [1,7,15] 我不明白为什么我不能将其转换为整数[]。有什么建议吗?

  • 主要内容:之前的旧方法,Java11 的 新方法,Java11 集合转换为数组 的示例Java 11 引入了一种将集合转换为数组的简单方法。 之前的旧方法 Java11 的 新方法 Java11 集合转换为数组 的示例 ApiTester.java 输出结果为  

  • 我想显示一个图形,为了显示它,我需要整数值。我从我的代码中得到这个 有没有什么方法可以让我以这样一种方式转换集合以获得整数值?我在打印集合c时得到这个