0

次の多次元配列があります。

Array
(
    [0] => Array
        (
            [place] => 1
            [date] => 2013-01-01
        )

    [1] => Array
        (
            [place] => 2
            [date] => 2013-01-02
        )

    [2] => Array
        (
            [place] => 3
            [date] => 2013-01-03
        )

    [3] => Array
        (
            [place] => 10
            [date] => 2013-01-01
        )

    [4] => Array
        (
            [place] => 8
            [date] => 2013-01-02
        )

    [5] => Array
        (
            [place] => 5
            [date] => 2013-01-03
        )

)

日付が一致する各配列の平均位置を取得するにはどうすればよいので、出力配列は次のようになりますか? 私ができることのほとんどは、配列をループして日付を抽出することです。これは非常に簡単ですが、一致を見つけて平均を取得することは私を超えています。前もって感謝します。

Array
(
    [0] => Array
        (
            [place] => 5.5
            [date] => 2013-01-01
        )

    [1] => Array
        (
            [place] => 5
            [date] => 2013-01-02
        )

    [2] => Array
        (
            [place] => 6.5
            [date] => 2013-01-03
        )

)
4

2 に答える 2

2
$input = array(
    array('place' => 1, 'date' => '2013-01-01'),
    array('place' => 2, 'date' => '2013-01-02'),
    array('place' => 3, 'date' => '2013-01-01'),
);
foreach($input as $pair) $tmp[$pair['date']][] = $pair['place'];
foreach($tmp as $key => $value){
    $result[] = array('place' => array_sum($value) / count($value), 'date' => $key);
}
//var_dump($result);

結果:

array (size=2)
  0 => 
    array (size=2)
      'place' => int 2
      'date' => string '2013-01-01' (length=10)
  1 => 
    array (size=2)
      'place' => int 2
      'date' => string '2013-01-02' (length=10)
于 2013-09-17T15:23:07.277 に答える
1

キーが日付で、値がその日付の場所の配列である配列に入力配列を解析できます。

$tmp = array();
foreach( $input as $entry  ) {
    $date = $entry["date"];

    if( !array_key_exists( $date, $tmp ) ) {
        $tmp[$date] = array();
    }

    $tmp[$date][] = $entry["place"];
}

次に、その一時配列を調べて、平均を計算し、必要な出力形式を生成します。

$averages = array();
foreach( $tmp as $date => $places ) {
    $sum = array_sum($places);
    $averages[] = array(
        "date" => $date,
        "place" => $sum / count($places)
    );
}

print_r($averages);
于 2013-09-17T15:19:11.433 に答える