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]和丢弃Array[2]

我尝试了一个 foreach 函数:

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

却发现那是不行的日子。如何对这个数组进行排序,保持每天的最高值,然后丢弃其余的?

4

3 回答 3

1

这是解决此问题的一种方法:

  • 使用 foreach 遍历数组

  • 在 foreach 循环中,按名称、日期、数字对新数组进行分组

  • 如果存在,则与以前的值进行比较,如果数字更高,则覆盖

希望这可以帮助。

于 2012-04-30T21:51:58.503 回答
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 回答