使用uasort尝试对数字数组进行排序并将所有字母值放在数组的末尾

匿名的

我有一个类似这样的关联数组:

$ return ['data']

Array (
[0] => Array
    (
        [id] => 19957
        [yt_id] => 19957-OPEN
        [name] => 19957-OPEN
        [score] => N/A
    )

[1] => Array
    (
        [id] => 19965
        [yt_id] => 19965-OPEN
        [name] => 19965-OPEN
        [score] => N/A
    )

[2] => Array
    (
        [id] => 20034
        [yt_id] => UCGbcYB89XesffWVJKPUpA
        [name] => 1994firebug
        [score] => 458.43
    )

[3] => Array
    (
        [id] => 20036
        [yt_id] => UCGbcfgXexlIirWVJKPUpA
        [name] => 1994firebug
        [score] => 344.69
    ) );

我正在根据得分的升序和降序对数组进行排序。

因此,数组中的得分值现在为“ N / A”。

因此,以“ N / A”值升序排序时,分数最终显示出来。当下降时,它会在开始时显示。

现在我想做的是根据分数值对数组进行升序还是降序排序,但是当分数值为“ n / a”时,我希望所有这些“ N / A”值都显示在数组末尾在任何时候,无论它是上升还是下降。

这是我的代码。

if($sort_by == "score"){
    if($sort_direction == "asc") {
       uasort($return['data'], function($a, $b) use ($sort_by) { return strnatcmp($a[$sort_by], $b[$sort_by]);});                       

    }   else {
       uasort($return['data'], function($a, $b) use ($sort_by) { return strnatcmp($b[$sort_by], $a[$sort_by]); });                              
    }
    $return['data'] = array_slice($return['data'], $start, $length);  
}

我希望我的问题很清楚,是否有人可以提供简便有效的解决方案。

编辑:-我想这样做-检查数组中score的值是否为'N / A',将其从其位置取消设置,然后将其移至最后。尽管仍然无法正常工作,但出现错误“未设置偏移量非法”。我不知道我在做什么错。

一旦整个数组在if else语句中排序后,我就会这样做。

    foreach ($return['data'] as $key) {
                    if($key['score'] == 'N/A'){
                    $item = $key;
                    unset($key);
                    array_push($return['data'], $item); 
                }
}

即使工作正常,在某些情况下,我的应用程序仍可以在数组中排序成百上千条记录。因此,这种方式的分类已经变得非常缓慢。因此,我确定使用更多的循环或类似的操作会使速度更加缓慢。就我而言,这是不可行的。那么,有人对此有更好的解决方案吗?

编辑:我更改了代码,它不再给我一个非法的偏移量错误。但是它仍然没有按我预期的那样工作。不删除所有N / A值并将其放在最后。

为了简化它:

usort($data, function (array $a, array $b) {
    if ($a['score'] == $b['score']) {
        return 0;
    }
    if ($a['score'] == 'N/A') {
        return -1;
    }
    if ($b['score'] == 'N/A') {
        return 1;
    }
    return $a['score'] - $b['score'];
});

如果两个值都相等(“ N / A”或其他任何值),则结果为0,否则,如果a为“ N / A”(并且另一个不如上一步所示),则a更大,反之亦然,否则进行一般的数值比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用orderBy:如何对数字数组排序并将所有字符串值放在底部?

来自分类Dev

使用Java脚本对字母数字数组进行排序

来自分类Dev

在数组对象内部对数字数组进行排序,同时保持其他数组的顺序与排序后的数字数组的顺序相同

来自分类Dev

按字母值对数组进行排序

来自分类Dev

Ruby根据多个条件对数字数组进行排序

来自分类Dev

用科学计数法对数字数组进行排序

来自分类Dev

如何根据大小对数字数组列表进行排序?

来自分类Dev

在VBS中对数字数组进行排序

来自分类Dev

在Inno Setup中对数字数组进行排序

来自分类Dev

如何在C中对数字数组进行排序

来自分类Dev

PHP使用uasort按值对多维数组进行排序,该数组具有NULL

来自分类Dev

根据数字值对数组进行排序,但如果为布尔值,则添加到末尾

来自分类Dev

使用算术运算符与比较运算符对数字数组进行排序

来自分类Dev

字母数字在JavaScript中对数组进行排序

来自分类Dev

重新排序字母数字数组

来自分类Dev

使用 Powershell 对数组值进行排序

来自分类Dev

ActionScript 3使用数字和字母对数组进行排序无法正常工作

来自分类Dev

如何创建对数字数组进行排序并能够即时交换数组的函数?

来自分类Dev

如何创建对数字数组进行排序并能够即时交换数组的函数?

来自分类Dev

在 JavaScript 中对数字数组和对象数组进行排序

来自分类Dev

仅使用数字,数字字母,字母数字和字母的组合对数组排序

来自分类Dev

尝试按字母顺序对数组排序

来自分类Dev

在数组perl中按数字对数字和按字母顺序排序

来自分类Dev

使用sort方法按字母顺序对数组进行排序

来自分类Dev

使用.sort对数字数组进行排序,但我不知道为什么这样做

来自分类Dev

如何对所有元素值求和并将该数字附加到数组的末尾?

来自分类Dev

根据值中的数字对数组进行排序

来自分类Dev

先对数字进行排序,然后对字符串数组中的字母进行排序

来自分类Dev

如何找到在JavaScript中按降序对数字数组进行排序所需的最小交换次数

Related 相关文章

  1. 1

    使用orderBy:如何对数字数组排序并将所有字符串值放在底部?

  2. 2

    使用Java脚本对字母数字数组进行排序

  3. 3

    在数组对象内部对数字数组进行排序,同时保持其他数组的顺序与排序后的数字数组的顺序相同

  4. 4

    按字母值对数组进行排序

  5. 5

    Ruby根据多个条件对数字数组进行排序

  6. 6

    用科学计数法对数字数组进行排序

  7. 7

    如何根据大小对数字数组列表进行排序?

  8. 8

    在VBS中对数字数组进行排序

  9. 9

    在Inno Setup中对数字数组进行排序

  10. 10

    如何在C中对数字数组进行排序

  11. 11

    PHP使用uasort按值对多维数组进行排序,该数组具有NULL

  12. 12

    根据数字值对数组进行排序,但如果为布尔值,则添加到末尾

  13. 13

    使用算术运算符与比较运算符对数字数组进行排序

  14. 14

    字母数字在JavaScript中对数组进行排序

  15. 15

    重新排序字母数字数组

  16. 16

    使用 Powershell 对数组值进行排序

  17. 17

    ActionScript 3使用数字和字母对数组进行排序无法正常工作

  18. 18

    如何创建对数字数组进行排序并能够即时交换数组的函数?

  19. 19

    如何创建对数字数组进行排序并能够即时交换数组的函数?

  20. 20

    在 JavaScript 中对数字数组和对象数组进行排序

  21. 21

    仅使用数字,数字字母,字母数字和字母的组合对数组排序

  22. 22

    尝试按字母顺序对数组排序

  23. 23

    在数组perl中按数字对数字和按字母顺序排序

  24. 24

    使用sort方法按字母顺序对数组进行排序

  25. 25

    使用.sort对数字数组进行排序,但我不知道为什么这样做

  26. 26

    如何对所有元素值求和并将该数字附加到数组的末尾?

  27. 27

    根据值中的数字对数组进行排序

  28. 28

    先对数字进行排序,然后对字符串数组中的字母进行排序

  29. 29

    如何找到在JavaScript中按降序对数字数组进行排序所需的最小交换次数

热门标签

归档