如何从具有特定键最大值的关联数组中提取特定数量的数据
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)
);
这里我的做法是,从 Whosebug 本身发现,首先使用 array_keys($array1 ,max($array1 )) 找到具有最大值的条目,然后将其存储在 $max_array, 从 $array1 中弹出,然后重做 3 次。
但是因为在$array1中,第一个键是id,它取id的最大值,而不是age。如果以下代码无法正常工作,请告诉我是否可以提高效率。
$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);
对前三个值使用 array_multisort and 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>";
你可以这样试试,非常简单方便;
$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));
列 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)
);
在这里我想提取最大年龄的条目(假设三个条目)并存储在一个新数组中,比如 $max_array。 所以,
$max_array = array(
array('id'=>'c','age'=>56),
array('id'=>'a','age'=>24),
array('id'=>'b','age'=>23)
);
这里我的做法是,从 Whosebug 本身发现,首先使用 array_keys($array1 ,max($array1 )) 找到具有最大值的条目,然后将其存储在 $max_array, 从 $array1 中弹出,然后重做 3 次。
但是因为在$array1中,第一个键是id,它取id的最大值,而不是age。如果以下代码无法正常工作,请告诉我是否可以提高效率。
$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);
对前三个值使用 array_multisort and 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>";
你可以这样试试,非常简单方便;
$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));
列 age
在数组中使用 array_column()
,然后使用 array_multisort()
.
<?php
$arr1 = array_column($array1, 'age');
array_multisort($arr1, SORT_DESC, $array1);
var_dump($array1);