繁体   English   中英

按子数组值对数组索引排序

Sort Array Index by SubArray Value

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下数组结构,但我需要按标记值排序,并且在重复时需要最后按数组索引排序:

这是我基于数组的$AsocContData[$s_list_100]

array(5) {
    [01081] => Array(3){
        [id] => 2
        [Mark] => 420
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [00358] => Array(3){
        [id] => 6
        [Mark] => 500
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [00277] => Array(3){
        [id] => 3
        [Mark] => 400
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [00357] => Array(3){
        [id] => 1
        [Mark] => 500
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
}

按子数组排序数组的最佳方法是什么?如果重复使用索引数组,最好的方法是增量数组?

因此结果如下所示:

array(5) {
    [00277] => Array(3){
        [id] => 3
        [Mark] => 400
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [01081] => Array(3){
        [id] => 2
        [Mark] => 420
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [00357] => Array(3){
        [id] => 1
        [Mark] => 500
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
    [00358] => Array(3){
        [id] => 6
        [Mark] => 500
        [lastUpdated] => 2010-03-17 15:44:12
        [dataNext] => Array(2){
            [more1] => 54
            [More2] => 54
        }
    }
}

更新资料

我尝试使用此功能,但在php 7.2中没有所需的作用域:

usort($AsocContData[$s_list_100], function ($a, $b) {
    return $a['Prod_Mark'] <=> $b['Prod_Mark'];
});

此返回值,不对重复项进行排序:

array(20) {
  [0]=>// remplace this first Index array with position and it is a fail.
  array(38) {

  }
}

更新资料

基本数组是动态嵌套的,可以嵌套更多的Array子级。

2 个回复
<?php
$list = [
    277 => [
        'id' => 3,
        'Mark' => 400,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    1081 => [
        'id' => 2,
        'Mark' => 420,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    357 => [
        'id' => 1,
        'Mark' => 500,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    358 => [
        'id' => 6,
        'Mark' => 500,
        'lastUpdated' => '2010-03-17 15:44:12'
    ]
];

$tmp = array_column($list, 'Mark');
array_multisort($tmp, SORT_ASC, array_keys($list), SORT_ASC, $list);
var_dump($list);

应该做

您可能应该使用array_multisort()

array_multisort(
    array_column( $AsocContData[$s_list_100], 'Mark' ), // sort by the Mark sub-array value first
    SORT_ASC, // ascending
    SORT_NUMERIC, // treat data as numeric
    array_keys( $AsocContData[$s_list_100] ), // secondly, sort by the array indexes
    SORT_ASC, // ascending
    SORT_NUMERIC, // treat indexes as numeric
    $AsocContData[$s_list_100] // this array will be sorted in place and by reference
);

var_dump( $AsocContData[$s_list_100] );

输入:

$AsocContData[$s_list_100] = array(
    '01081' => Array(
        'id' => 2,
        'Mark' => 420,
        'lastUpdated' => '2010-03-17 15:44:12'
    ),
    '00358' => Array(
        'id' => 6,
        'Mark' => 500,
        'lastUpdated' => '2010-03-17 15:44:12'
    ),
    '00277' => Array(
        'id' => 3,
        'Mark' => 400,
        'lastUpdated' => '2010-03-17 15:44:12'
    ),
    '00357' => Array(
        'id' => 1,
        'Mark' => 500,
        'lastUpdated' => '2010-03-17 15:44:12'
    )
);

输出:

Array
(
    [00277] => Array
        (
            [id] => 3
            [Mark] => 400
            [lastUpdated] => 2010-03-17 15:44:12
        )

    [01081] => Array
        (
            [id] => 2
            [Mark] => 420
            [lastUpdated] => 2010-03-17 15:44:12
        )

    [00357] => Array
        (
            [id] => 1
            [Mark] => 500
            [lastUpdated] => 2010-03-17 15:44:12
        )

    [00358] => Array
        (
            [id] => 6
            [Mark] => 500
            [lastUpdated] => 2010-03-17 15:44:12
        )

)
2 如何使用未知索引按子数组值对数组进行排序

我有这个PHP数组: 并且我需要按子数组值['data'] ['price']对其进行排序,因此输出如下所示: 我尝试了几种usort组合,但问题是,在我的示例中,我不知道子数组索引将是什么(65、173、132、956、175、64)。 你有什么想法如何排序吗? 数 ...

3 按可能的最高子数组值对数组进行排序

我有一个与此问题类似的问题: PHP按SubArray值对数组进行排序,但这有点不同,因为我要查找/搜索许多子数组值中的最大值,然后再对“主”数组进行排序。 下面是我拥有的数组结构,其中的分组包含多个子项,每个子项都有一个得分。 我想要 检查每个分组中子项中的最高分 ...

5 如何按子数组键和值对数组排序

大家好:)这是我的第一个问题,所以我希望得到答案:)我有一个像这样的数组数组: 问题:我如何才能对其进行分类。 按字母数字顺序由子数组键和子数组值组成,以便像下面的那样转换? ...

6 PHP-按子数组中的值对数组进行排序-DESC和ASC

我需要按子数组中的值对数组进行排序。 我必须在两个选项中执行它-desc排序和asc排序(因此我需要在函数中定义此参数)。 这是我的数组: 我想通过client_type数组键(asc和desc)对该数组进行排序。 我该怎么办? 我检查了这个答案: PHP按SubArray值 ...

8 PHP - 根据第二个数组按子阵列值对数组进行排序

我做了一些研究,包括通过SubArray Value浏览PHP排序数组,但这是一个变体: 我有一个数组如下: 我还有一个数组的第二个group_id数组,它与用户执行的搜索相关: 我想要做的是根据$gids的值,通过group_id订购$data 。 所以$data的顺序 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM