在php中只保留数组数组中的三个最高值

Keep only the three highest values in array of array in php

提问人:beaumoqueur 提问时间:12/5/2022 最后编辑:Sai Chandra Gaddebeaumoqueur 更新时间:12/5/2022 访问量:100

问:

我有一个包含 83 个数组的数组(我在 83 中有一个块的数组)。我试图只保留每个数组的三个最高值。每个数组中的所有数字都包含在 -1 和 1 之间。每个数组中必然有一个 1,我不想在我的三个最高值中计数。

        Array
    (
        [0] => Array
            (
                [1] => 0.5278533158407
                [2] => 0.4080014506744
                [3] => 0.5086879008467
                [5] => 0.3950042642736
                [6] => 1
        [1] => Array
            (
                [1] => 1
                [2] => 0.52873390443395
                [3] => 0.52518076782133
                [4] => 0.52983621494599
                [5] => 0.54392829322042
                [6] => 0.53636363636364

Etc...

我正在尝试以下代码,但它不起作用。

for ($i = 0; $i < sizeof($list_chunk); $i++) {
        arsort($list_chunk[$i]);
        }
        
for ($i = 0; $i < sizeof($list_chunk); $i++) {
        array_slice($list_chunk[$i],1,3,true);
        }
        
   
print("<pre>");
print_r($list_chunk);
print("</pre>");

   

有人可以帮助我吗?多谢

PHP 排序 最大 切片

评论


答:

0赞 jspit 12/5/2022 #1

此解决方案使用带有子数组引用的 foreach 循环。子数组按大小降序排序。提取第一个到第三个元素。如果第一个元素是 1,则从 2 个元素中提取 3 个元素。

foreach($array as &$arr){
  rsort($arr);
  $start = $arr[0] == 1 ? 1 : 0;
  $arr = array_slice($arr,$start,3);
}

结果:

array (
  0 => 
  array (
    0 => 0.5278533158407,
    1 => 0.5086879008467,
    2 => 0.4080014506744,
  ),
  1 => 
  array (
    0 => 0.54392829322042,
    1 => 0.53636363636364,
    2 => 0.52983621494599,
  ),
)

完整样品试试:https://3v4l.org/pUhic