繁体   English   中英

计数数组值php

[英]Count Array values php

我正在使用laravel,在尝试计算此数组的值时收到此错误。

错误:array_count_values():只能计算STRING和INTEGER值!

功能:

public function test()
{
  $test = \DB::table('surveys')->where('company_id', '=', 1)->select('rd1')->get()->toArray();;
  $c = array_count_values($test);
  $val = array_search(max($c), $c);
  return view ('companies.test', compact('val'));

}

这是$ test的var_dump:

  array:4 [▼
  0 => {#204 ▼
    +"rd1": "option1"
  }
  1 => {#206 ▼
    +"rd1": "option1"
  }
  2 => {#207 ▼
    +"rd1": "option1"
  }
  3 => {#208 ▼
    +"rd1": "option1"
  }
]

如果元素不是字符串或数字,则内置函数array_count_values()无法计算频率。 但是,您可以轻松地执行循环来做到这一点:

foreach ($array as $e)
    $frequency[$e] =+ 1;

这基本上与内置功能相同。 注意,这些元素用作最终频率数组的键(您可以想象,如果$e不是有效的键(字符串或数字),它将失败)。 在您的情况下,您需要将元素的属性用作键。 例如,如果它是另一个数组:

foreach ($test as $e)
    $frequency[$e['survey_name']] += 1;

或对象的属性/方法:

foreach ($test as $e)
    $frequency[$e->myColumn()] += 1;

您的数组是2d,array_count_values不喜欢该数组。 您既可以执行循环并自己计算值,也可以使用诸如array_column之类的方法仅从一列中获取值的数组。 例:

array_count_values(array_column($test, $columnName))

array_column将仅从您指定的一列中获取值数组,在您的情况下,该列为字符串,并且可以将返回的数组传递给array_count_values以获取所需的结果。

当然,正如其他人所评论的那样,数据库可以更有效地完成这种分组和计数(您将传递回更少的数据,并且可以优化数据库以返回带有索引的查询)。 这是涵盖此问题的另一个问题

然后,您可以使用array_column将其转换回类似的数组,如下所示:

\DB::table('surveys')
    ->where('company_id', '=', 1)
    ->select('rd1', \DB::raw('count(*) as total')
    ->groupBy('rd1')
    ->get()
    ->toArray();;
array_column($test, 'total', 'rd1');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM