[英]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.