Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有条件的二维数组上的最大值?_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 有条件的二维数组上的最大值?

Php 有条件的二维数组上的最大值?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个包含以下值的数组: Array ( [0] => Array ( [0] => John [1] => 2012-03-29 [2] => 1 ) [1] => Array ( [0] => Doe [1] => 2012-03-30 [2] => 1 ) [2] => Array

我有一个包含以下值的数组:

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[][1]
中的每个日期获取
array[][2]
的最大值

例如,在数组中

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]));
}

但发现这是不工作的日子。如何对该数组进行排序,使其每天保持最大值,并丢弃其余值?

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

  • 带foreach的循环数组

  • 在foreach循环组中,按名称、日期和编号创建新数组

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


希望这能有所帮助。

这里有一种解决方法:

  • 带foreach的循环数组

  • 在foreach循环组中,按名称、日期和编号创建新数组

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

希望这有帮助。

试试这个:

$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
(
    [2012-03-29] => 1
    [2012-03-30] => 1
    [2012-03-31] => 5
    [2012-04-02] => 21
    [2012-03-07] => 20
)
试试这个:

$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
(
    [2012-03-29] => 1
    [2012-03-30] => 1
    [2012-03-31] => 5
    [2012-04-02] => 21
    [2012-03-07] => 20
)

下面的代码将遍历$data中的每个值,或者将新遇到的日期添加到
$cache
中,或者检查它是否更大

$cache=array();
//注意:$data是上面提供的数组,替换为变量名。
foreach($k=>v的数据){
如果(isset($cache[$v[1]])){
如果($cache[$v[1]]<$v[2]){
$cache[$v[1]]=$v[2];
}
}否则{
$cache[$v[1]]=$v[2];
}
}

完成后,
$cache
将是一个数组,其值为日期,键为
数组[][2]

的最大值。以下代码将在$data中的每个值上迭代,或者将新遇到的日期添加到
$cache
中,或者检查它是否更大

$cache=array();
//注意:$data是上面提供的数组,替换为变量名。
foreach($k=>v的数据){
如果(isset($cache[$v[1]])){
如果($cache[$v[1]]<$v[2]){
$cache[$v[1]]=$v[2];
}
}否则{
$cache[$v[1]]=$v[2];
}
}
完成后,
$cache
将是一个数组,其值为日期,键为
数组[][2]
的最大值

$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];
  }
}