PHP多维数组 - 计算实例数

时间:2015-02-04 16:21:19

标签: php arrays multidimensional-array

我在PHP中使用多维数组有点挣扎。我是PHP的新手,所以请注意我可能会遇到一些菜鸟。

我想要实现的目标:我使用ExpressionEngine作为我的CMS,使用Freeform Pro记录调查的答案。答案的值是1,2,3,4或5.这一切都很好。然后我使用SQL查询将保存的数据从数据库中提取出来。这是它开始变得复杂的地方。我需要调查中每个问题的平均值。所以合乎逻辑的做法(我认为)是为每个问题提取数据并将其放入数组中:

$tva_1 = array();
$tva_2 = array();
$tva_3 = array();
$tva_4 = array();

SELECT form_field_259, form_field_260, form_field_261, form_field_262 FROM exp_freeform_form_entries_13 WHERE status='open'

array_push($tva_1, ('{form_field_259}'));
array_push($tva_2, ('{form_field_260}'));
array_push($tva_3, ('{form_field_261}'));
array_push($tva_4, ('{form_field_262}'));

请记住,$ tva_1中可能包含5个变量,例如:2,4,3,1,4。$ tva_2也是如此,依此类推。

因此,一旦我将数据分配给各种tva_数组,我就需要将这四个数组放入另一个数组,即$ allNumberArray:

$allNumberArray = array($tva_1, $tva_2, $tva_3, $tva_4);

现在如果我尝试print_r($ allNumberArray);它向我显示所有数据都在那里,一切正常。

Array
(
    [0] => Array
        (
            [0] => 3
            [1] => 5
            [2] => 2
            [3] => 5
            [4] => 3
        )

    [1] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 4
            [3] => 3
            [4] => 3
        )

    [2] => Array
        (
            [0] => 5
            [1] => 4
            [2] => 3
            [3] => 1
            [4] => 3
        )

    [3] => Array
        (
            [0] => 4
            [1] => 2
            [2] => 5
            [3] => 1
            [4] => 3
        )

问题是:我需要计算每个评级的使用次数。因此,例如,我可以从上面的print_r看到5显示4次,4显示3次,3显示7次等等。我已经尝试了一个计数功能,如下面的那个,但只能在单维数组(我认为):

$userStrongAgree = count(array_filter($allNumberArray, function ($agreementFive) { return $agreementFive == 5; }));

我一直坚持这个问题一天半,我的截止日期是明天下午,所以我开始有点担心。我真的很感激任何帮助,或只是指向正确的方向。

非常感谢

2 个答案:

答案 0 :(得分:2)

尝试将所有项目推送到uniquq数组并使用array_count_values()计算:

<?php
$array=$allNumberArray; //your Array

$new_arr=array();
foreach($array as $key=>$value){
    foreach ($value as $key2 => $value2) {
        array_push($new_arr,$value2);
        }
}
$last_arr=array_count_values($new_arr);
foreach ($last_arr as $key3 => $value3) {
    echo $key3.' is '.$value3.' times<br>';
    }
?>

答案 1 :(得分:1)

试一试。索引是值/评级,值是计数:

$count = array_count_values(call_user_func_array('array_merge', $array));