我正在使用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"
}
]
答案 0 :(得分:0)
内置函数array_count_values()
无法计算
如果元素不是字符串或数字,则为频率。但是,你可以
轻松执行循环:
foreach ($array as $e)
$frequency[$e] =+ 1;
这基本上与内置功能相同。注意元素
用作最终频率数组的键(你可以想象它
如果$e
不是有效密钥(字符串或数字),它将失败)。在你的
case,您需要使用元素的键作为键。例如,如果
这是另一个阵列:
foreach ($test as $e)
$frequency[$e['survey_name']] += 1;
或对象的属性/方法:
foreach ($test as $e)
$frequency[$e->myColumn()] += 1;
答案 1 :(得分:0)
你的数组是2d,array_count_values不喜欢。您可以执行循环并自己计算值,也可以使用array_column之类的东西从一列中获取值的数组。例如:
array_count_values(array_column($test, $columnName))
array_column将从您指定的一列中获取一个值数组,在您的情况下是一个字符串,返回的数组可以传递给array_count_values以获得您想要的结果。
当然,正如其他人评论的那样,这种分组和计数可以通过数据库更有效地完成(您可以传回更少的数据,并且可以优化数据库以返回类似于索引的查询)。 Here is another question that covers this
然后您可以将其转换为类似于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');