php 筛选2d数组的行以最佳方式保留行,以便列的值按降序显示

vyswwuz2  于 12个月前  发布在  PHP
关注(0)|答案(2)|浏览(134)

我正在解决一个公式为传销网站分配其成员的佣金.
我在PHP $directors中有一个二维数组,如下所示:

[
    ["user_id" => 10, "directors_count" => 6],
    ["user_id" => 11, "directors_count" => 2],
    ["user_id" => 12, "directors_count" => 5],
    ["user_id" => 13, "directors_count" => 1],
    ["user_id" => 14, "directors_count" => 1],
    ["user_id" => 15, "directors_count" => 2],
    ["user_id" => 16, "directors_count" => 1],
    ["user_id" => 17, "directors_count" => 0],
]

字符串
$directors数组将用于生成一个名为$final_array的新数组,该数组将从$directors数组$directors[''directors_count]按键(DESC方式)提取数据,但以直接的方式。
我希望$directors数组被提取,如

最高控制器数>>次高控制器数>>次高控制器数

如果不返回数组的索引,不需要的索引将被删除。
如在below图像中提到的,所有没有突出显示的索引(红色)将被删除


的数据
所以$final_array看起来像下面的东西

Array
(
[0] => Array
    (
        [user_id] => 10
        [directors_count] => 6
    )

[1] => Array
    (
        [user_id] => 12
        [directors_count] => 5
    )

[2] => Array
    (
        [user_id] => 15
        [directors_count] => 2
    )

[3] => Array
    (
        [user_id] => 16
        [directors_count] => 1
    )

[4] => Array
    (
        [user_id] => 17

        [directors_count] => 0
        )

)

r1zk6ea1

r1zk6ea11#

这将为您工作的肯定。看看下面的方法。

  • 阵列列
  • 数组唯一
  • 数组多排序
  • 数组相交键
array_multisort(array_column($array, 'directors_count'), SORT_DESC,
                array_column($array, 'user_id'),      SORT_DESC,
                $array);

$tempArr = array_unique(array_column($array, 'directors_count'));
$final_array = array_intersect_key($array, $tempArr);                
print_r($final_array);

字符串

输出:

Array ( 
 [0] => Array ( [user_id] => 10 [directors_count] => 6 ) 
 [1] => Array ( [user_id] => 12 [directors_count] => 5 ) 
 [2] => Array ( [user_id] => 15 [directors_count] => 2 ) 
 [4] => Array ( [user_id] => 16 [directors_count] => 1 ) 
 [7] => Array ( [user_id] => 17 [directors_count] => 0 ) 
)

DEMO:https://3v4l.org/JV0Kn

wpcxdonn

wpcxdonn2#

以我对任务的理解,你不需要一个以上的周期。

  • 建立一个临时变量,其数字小于directors_count列中可能的最小数字。
  • 反向迭代数组。
  • 将符合条件的行推入数组的前面,并将临时值更新为遇到的directors_count值。

产品编号:(Demo

$result = [];
$toBeat = -1;
for ($i = count($array) - 1; $i >= 0; --$i) {
    if ($array[$i]['directors_count'] > $toBeat) {
        array_unshift($result, $array[$i]);
        $toBeat = $array[$i]['directors_count'];
    }
}
var_export($result);

字符串

相关问题