如何从关联数组中提取特定数量的数据,并为某个键取最大值


how to extract specific amount of data from a associative array with a maximum value for a certain key

让我们假设,

$array1 = array(
array('id'=>'a','age'=>21),
array('id'=>'b','age'=>23),
array('id'=>'c','age'=>56),
array('id'=>'d','age'=>13),
array('id'=>'a','age'=>24)
);

这里我想提取具有最大年龄的条目(假设有三个条目)并存储在一个新数组中,例如$max_array。

$max_array = array(
array('id'=>'c','age'=>56),
array('id'=>'a','age'=>24),
array('id'=>'b','age'=>23)
);

在这里,我所做的是,从StackOverflow本身发现,首先使用array_keys($array1,max($array1))找到具有最大值的条目,然后将其存储在$max_array中,从$array1中弹出它,然后重做该过程3次。

但是由于在$array1中,第一个键是id,它取id的最大值,而不是年龄。如果不遵循代码工作良好,请让我知道,如果我能使它更有效。

$max_ppl=array();
for ($i=0; $i <3 ; $i++) { 
    $max_ppl[] = max($array1);
    $ppl_time_sort = (array_keys($array1,max($array1)));
    unset($array1[$ppl_time_sort[0]]);
}
print_r($max_ppl);

age在使用array_column()的数组中,然后使用array_multisort()进行排序。

<?php
$arr1 = array_column($array1, 'age');
array_multisort($arr1, SORT_DESC, $array1);
var_dump($array1);

你可以这样试试,既简单又方便;

$array1 = array(
            array('id'=>'a','age'=>21),
            array('id'=>'b','age'=>23),
            array('id'=>'c','age'=>56),
            array('id'=>'d','age'=>13),
            array('id'=>'a','age'=>24)
    );
    $ages = array_map(function($v){
        return $v['age'];
    }, $array1);
    array_multisort($ages, SORT_DESC, $array1 );
    var_dump($array1, array_slice($array1, 0, 3));

对前三个值使用array_multisort和array_slice如果你想得到三个小的改变

array_multisort($Ages, SORT_DESC, $array); // SORT_DESC for SORT_ASC

代码完成

echo "<pre>";
 $Ages= array();
  foreach ($array as $key => $row)
   {
      $Ages[$key] = $row['age'];
  }
  array_multisort($Ages, SORT_DESC, $array);
  print_r(array_slice($array,0, 3));
echo "</pre>";