0

これらの値を持つ配列があります:

Array
(
    [0] => Array
    (
        [0] => John
        [1] => 2012-03-29
        [2] => 1
    )
    [1] => Array
    (
        [0] => Doe
        [1] => 2012-03-30
        [2] => 1
    )
    [2] => Array
    (
        [0] => John
        [1] => 2012-03-31
        [2] => 2
    )
    [3] => Array
    (
        [0] => Doe
        [1] => 2012-03-31
        [2] => 5
    )
    [4] => Array
    (
        [0] => John
        [1] => 2012-04-02
        [2] => 5
    )
    [5] => Array
    (
        [0] => John
        [1] => 2012-04-02
        [2] => 21
    )
)

array[][2]の各日付の最大値を取得しようとしていますarray[][1]

たとえば、配列では

Array[2][1] = 2012-03-31 | Array[2][2] = 2
Array[3][1] = 2012-03-31 | Array[3][2] = 5

Array[3]それらの同じ2日間のうち、私は保持して破棄したいと思いArray[2]ます。

foreach 関数を試しました:

foreach ($days as $k) {
    $max_vals[] = array($k[0], $k[1], max($k[2]));
}

しかし、それが日々働いていないことがわかりました。この配列を各日の最高値を保持してソートし、残りを破棄するにはどうすればよいですか?

4

3 に答える 3

1

これを試して:

$bigArray=array(
array('John','2012-03-29',1),
array('Doe','2012-03-30',1),
array('John','2012-03-31',2),
array('Doe','2012-03-31',5),
array('John','2012-04-02',5),
array('John','2012-04-02',21),
array('John','2012-03-07',21)   
);
$output=array();
foreach($bigArray as $element){
if($element[1]>$output[$element[2]]){
$output[$element[2]]=$element[1];
}}

echo '<pre>';
print_r($output); 

これは以下を出力します:

Array
(
    [1] => 2012-03-30
    [2] => 2012-03-31
    [5] => 2012-04-02
    [21] => 2012-04-02
)

または反対を取得するには:

   $bigArray=array(
    array('John','2012-03-29',1),
    array('Doe','2012-03-30',1),
    array('John','2012-03-31',2),
    array('Doe','2012-03-31',5),
    array('John','2012-04-02',5),
    array('John','2012-04-02',21),
    array('John','2012-03-07',20)   
    );
$output=array();
    foreach($bigArray as $element){
    if($element[2]>$output[$element[1]]){
    $output[$element[1]]=$element[2];
    }}
echo '<pre>';
print_r($output); 

これは印刷します:

Array
(
    [2012-03-29] => 1
    [2012-03-30] => 1
    [2012-03-31] => 5
    [2012-04-02] => 21
    [2012-03-07] => 20
)
于 2012-04-30T21:57:41.300 に答える
1

次のコードは、$ dataの各値を反復処理し、新しく検出された日付をに追加$cacheするか、それよりも大きいかどうかを確認します。

$cache = array();
// Note: $data is the array you provided above, replace with your variable name.
foreach ($data as $k => $v) {
  if (isset($cache[$v[1]])) {
    if ($cache[$v[1]] < $v[2]) {
      $cache[$v[1]] = $v[2];
    }
  } else {
    $cache[$v[1]] = $v[2];
  }
}

終了$cacheすると、値が日付で、キーが最大値の配列になりますarray[][2]

于 2012-04-30T21:59:56.713 に答える
1

これを解決する1つの方法は次のとおりです。

  • foreach で配列をループする

  • foreach ループでは、新しい配列を名前、日付、番号でグループ化します

  • 存在する場合は以前の値と比較し、数値が大きい場合は上書きします

お役に立てれば。

于 2012-04-30T21:51:58.503 に答える