首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP usort多维数组

PHP usort多维数组
EN

Stack Overflow用户
提问于 2018-03-21 07:42:27
回答 4查看 235关注 0票数 0

我很难让我们去上班,也不知道我错过了什么。下面是我的数组的一个例子。我想根据排序关键字的值对数组进行排序。

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [sort] => 1520546956
        [row] => Data lives here
    )

[1] => Array
    (
        [sort] => 1521047928
        [row] => Data lives here
    )

[2] => Array
    (
        [sort] => 1520525366
        [row] => Data lives here
    )

[3] => Array
    (
        [sort] => 1520525227
        [row] => Data lives here
    )

我尝试对此进行排序的代码是:

代码语言:javascript
复制
foreach ($resultsArray as $record)
{
    usort($record['sort'], function($a, $b)
        {
            if ($a == $b)
                {
                    return 0;
                }
            return ($a < $b) ? -1 : 1;  
        });
}

然而,我的代码似乎是无效的,因为数组的顺序没有改变。我觉得我已经很接近了,但是我不知道我错过了什么。谢谢你的帮助!

EN

回答 4

Stack Overflow用户

发布于 2018-03-21 08:44:21

实现相同功能的另一种方法是将array_multisort与所需的排序标志组合一起使用。

数据集:

代码语言:javascript
复制
$resultsArray = array(
  array('sort'=>1520546956, 'row'=>'row 0 data'),
  array('sort'=>1521047928, 'row'=>'row 1 data'),
  array('sort'=>1520525366, 'row'=>'row 2 data'),
  array('sort'=>1520525227, 'row'=>'row 3 data')
);

array_multisort示例:

代码语言:javascript
复制
$sortValues = array_column($resultsArray, 'sort');
array_multisort($sortValues, SORT_ASC, $resultsArray);
print_r($resultsArray);

结果:https://3v4l.org/NpVIc

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [sort] => 1520525227
            [row] => row 3 data
        )

    [1] => Array
        (
            [sort] => 1520525366
            [row] => row 2 data
        )

    [2] => Array
        (
            [sort] => 1520546956
            [row] => row 0 data
        )

    [3] => Array
        (
            [sort] => 1521047928
            [row] => row 1 data
        )

)

或者,您仍然可以使用usort,但是在您的函数中,您需要检索名为sort的相关数组键,以便比较这些值。

usort示例:

代码语言:javascript
复制
usort($resultsArray, function($a, $b) { 
    if ($a['sort'] == $b['sort']) {
        return 0;
    }
    return ($a['sort'] < $b['sort'] ? -1 : 1);
});
print_r($resultsArray);

结果:https://3v4l.org/5nfbc

票数 1
EN

Stack Overflow用户

发布于 2018-03-21 07:57:45

已修改代码以反映以下建议:

代码语言:javascript
复制
usort($resultsArray, function($a, $b) { /* compare $a['sort'] and $b['sort'] */ }

工作得很完美。

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 08:03:18

$record['sort']必须是一个数组才能工作。然而,它仍然无能为力。

我很确定你想这么做:

代码语言:javascript
复制
<?php
$multiArray = array(
  array('sort'=>1520546956, 'row'=>'row 0 data'),
  array('sort'=>1521047928, 'row'=>'row 1 data'),
  array('sort'=>1520525366, 'row'=>'row 2 data'),
  array('sort'=>1520525227, 'row'=>'row 3 data'));
foreach($multiArray as $a){
  $numArray[] = $a['sort'];
}
asort($numArray, SORT_NUMERIC);
foreach($numArray as $k => $v){
  $resArray[] = $multiArray[$k];
}
print_r($resArray);
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49395877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档