计算数组值php

时间:2016-12-08 21:41:45

标签: php arrays laravel

我正在使用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"
  }
]

2 个答案:

答案 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');