1

この配列内の特定のキー (通話、連絡先、ピッチ) から平均を取得する方法を見つけようとしています。結果は、3 つの平均を保持する 3 つのキーだけを含む 1 つの配列にしたいと考えています。[calls]=>27 [contacts]=>13 などとなるはずです。よろしくお願いします。

Array ( 
    [0] => Array ( 
              [index] => 78 
              [name] => RepOne 
              [repnumber] => 0001 
              [date] => 2013-03-16 07:17:14 
              [calls] => 36 
              [contacts] => 21 
              [pitches] => 10 
    ) 

    [1] => Array ( 
              [index] => 75 
              [name] => RepOne 
              [repnumber] => 0001 
              [date] => 2013-03-13 10:03:06 
              [calls] => 18 
              [contacts] => 12 
              [pitches] => 8  
    ) 

    [2] => Array ( 
              [index] => 74 
              [name] => RepOne 
              [repnumber] => 0001 
              [date] => 2013-03-12 03:03:06 
              [calls] => 20 
              [contacts] => 6 
              [pitches] => 3 
    ) 
)
4

7 に答える 7

2
$avrage = array('calls' => 0,'contacts' => 0,'pitches' => 0); #prevent notice  
$i = count($yourArray);  #UPDATE
foreach($yourArray as $value)
{
   $avrage['calls'] += $value['calls'];
   $avrage['contacts'] += $value['contacts'];
   $avrage['pitches'] += $value['pitches'];
}
# UPDATE : check zero value before using division .
$avrage['calls'] = ($avrage['calls']?floor($avrage['calls']/$i):0);   #round value
$avrage['contacts'] = ($avrage['contacts']?floor($avrage['calls']/$i):0);
$avrage['pitches'] = ($avrage['pitches']?floor($avrage['calls']/$i):0); 
于 2013-03-19T17:15:13.943 に答える
0

こういう意味だと思います。私は「平均」の平均を引いています。

<?php
$newAverages = array();

$contacts = '';
$pitches = '';
$calls = '';

//Simply add them all together
foreach ($original_array as $key=>$throwaway){
 $contacts = $contacts + $original_array[$key]['contacts'];
 $pitches = $pitches + $original_array[$key]['pitches'];
 $calls = $calls + $original_array[$key]['calls'];
}

$totalReps = count($original_array);

//Then divide by the total
$newAverages['contacts'] = $contacts/$totalReps;
$newAverages['pitches'] = $pitches/$totalReps;
$newAverages['calls'] = $calls/$totalReps;

print_r($newAverages);
?>
于 2013-03-19T17:14:57.407 に答える
0

PHP には array_sum() のようないくつかのショートカット関数が存在しますが、この種の 2 次元構造については、直接的なステップ バイ ステップのソリューションがおそらく最適です。

$input_array = ...
$wanted_columns = array ("call", "contacts", "pitches");
$result = array_fill_keys ($wanted_columns, 0);

foreach ($input_array as $row) 
    foreach ($wanted_columns as $column_name) 
        $result[$column_name] += $row[$column_name];

$array_size = count ($input_array);
foreach ($result as &$value)
    $value /= $array_size;

** 上記のコードは、$wanted_columns に設定するだけで、必要な列の任意のセットに対して機能します。

于 2013-03-19T17:24:37.533 に答える
0
<?php

$dataRows = ...your array...;

$averages = array('calls' => 0, 'pitches' => 0, 'contacts' => 0)

//sum average for each row
foreach($dataRows as $row) {
    foreach($row as $key => $value) {
        $add = false;

        //only add for specific values
        switch($key) {
            case 'calls':
            case 'pitches':
            case 'contacts':
                $add = true;
        }

        if($add) {
            $averages[$key] += $value;
        }

    }
}

//divide by number of rows for average
//the &$value is important as it is the refernce to the value
//so it will set the value in the array
foreach($average as &$value) {
    $value /= count($dataRows);
}
于 2013-03-19T17:12:11.487 に答える
0

もう少し精巧な別のアプローチを次に示します。

// a function to extract values by particular column names
function array_columns( array $array, array $columns )
{
    $result = array_fill_keys( $columns, array() );
    foreach( $array as $value )
    {
        foreach( $columns as $column )
        {
            $result[ $column ][] = is_array( $value ) && array_key_exists( $column, $value )
                                   ? $value[ $column ]
                                   : null;
        }
    }

    return $result;
}

// a function to calculate the average value of array elements
function array_average( array $array )
{
    $count = count( $array );
    return $count > 0 ? array_sum( $array ) / $count : 0;
}

使用法:

$averages = array_map( 'array_average', array_columns( $yourArray, array( 'calls', 'contacts', 'pitches' ) ) );

var_dump( $averages );

プロデュース:

array(3) {
  ["calls"]=>
  float(24.666666666667)
  ["contacts"]=>
  int(13)
  ["pitches"]=>
  int(7)
}
于 2013-03-19T18:11:49.083 に答える