【问题标题】:How to get the data from a collection array in Laravel如何从 Laravel 中的集合数组中获取数据
【发布时间】:2018-01-10 14:35:46
【问题描述】:

我在Laravel 中有这个来自数据库的集合数组

 public function getdiagnosistally(){

      $jsonData = ListBuilder::all()->pluck('listdata');
        $res = $jsonData->contains('Test');
        dd($jsonData,$res);
}

我想知道是否可以计算集合中以下数据的出现次数。

我尝试过使用下面的包含方法,但即使集合中有测试,它也不会给我一个真实的结果。

 $res = $jsonData->contains('Test');

我也尝试过使用 count 方法,但它只给了我收集的总量,而不是 Test 的数量,它是 2,但结果给了我 6。

 $res = $jsonData->count('Test');

我瞄准的最终结果就像它将从 json 数据中计算 Test 的出现次数。

例如:-

Test = 2
Test child 1 = 4

您能建议我如何解决它吗?

【问题讨论】:

  • 这是一个字符串数组。如果不使用json_decode,就无法检查实际数据。 Ofc 你可以通过stristr 之类的操作来破解它,但这很愚蠢。
  • 除了@Andrew 的评论:您有 5 次“测试”,而不是 2 次。所以即使您能够修复您的代码,您的结果对您来说似乎是“错误的”。
  • 你有一个字符串数组。您只需要计算出现次数。正如安德鲁指出的那样。您必须解码 JSON。这与 laravel 无关,而是一个 PHP 问题。
  • 感谢您的输入,将记录下来

标签: php laravel


【解决方案1】:

由于您有一个集合,您可以使用filterarray_count_values 在功能上解决它。

  1. 首先,我们将 json 解码为数组并将其包装在 Collection 中。
  2. 然后我们过滤以仅保留包含字符串“Test”的值
  3. 我们使用 flatMap 在单个数组中获取所有这些值
  4. 所以我们终于可以使用array_count_values 来获得想要的结果了。

代码:

$testValues = $jsonData->flatMap(function($json) {
    $data = collect(json_decode($json, true)['checklist']);
    return $data->filter(function($item) {
        return str_contains($item, 'Test');
    });
});

$result = array_count_values($testValues->all());

dd($result);

请注意,在此解决方案中,我假设 json 的第一级始终是“清单”。如果没有,你必须循环它。

【讨论】:

  • 感谢 winkbrace 的详细解释。我将尝试您提供的示例代码,并检查如何正确使用过滤器和 array_count_method。干杯!
【解决方案2】:

您可以通过迭代集合和转换为数组的 JSON 数据来手动计算出现次数。

我刚刚对此进行了测试,它适用于您正在使用的数据格式:

$count = 0;
$jsonData->map(function($i) use(&$count) {
    $i = json_decode($i, true);
    array_map(function($i) use(&$count) {
        if (str_contains($i, 'Test')) $count++;
    }, $i['checklist']);
});

【讨论】:

  • 谢谢!将检查并尝试实施
【解决方案3】:

例如,您的数据库表名是“Checklist”,而“test”是一列。

$count = Checklist::Select('checklist.test')->count();

如果条件是这样,您也可以使用 where ->where('checklist_id', $request->id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2021-12-26
    • 2016-12-11
    • 2019-01-12
    • 2013-08-08
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多