【问题标题】:php : Sort 2 values of data by order alphabetical [duplicate]php:按字母顺序对 2 个数据值进行排序 [重复]
【发布时间】:2022-12-07 23:04:06
【问题描述】:

在一个数据中,我有一个字段标题和字段名称(字段名称是上传的 pdf 文件的名称,例如:My_file.pdf 和标题字段就像前端的覆盖,一个空字段)

考虑到名称字段和标题字段,我想按字母顺序对数据进行排序

实际上我试图像这样只按名称排序:

                usort($filesContent, function($a, $b) {
                    return strcmp($a->getName(), $b->getName());
                });

但现在我卡住了,我看不到如何在标题上添加过滤器

有人可以指导我解决我的问题吗?谢谢

【问题讨论】:

  • 仅供参考:排序和过滤是两个不同的东西。你问的是排序。
  • 谢谢,我编辑了我的帖子

标签: php


【解决方案1】:

你的回调函数可以做任何你想做的事。它只返回值很重要,你需要返回-1$a$b“小”(不管那是什么意思),如果$a“大于”$b0,则1如果两者相等。所以你基本上有两个排序键,你首先排序,如果你得到0然后你按第二个键排序。

usort($filesContent, function($a, $b) {
   $result = strcmp($a->getName(), $b->getName());
   return $result === 0
        ? strcmp($a->getTitle(), $b->getTitle())
        : $result;
});

【讨论】:

    【解决方案2】:

    您可以将名称和标题连接成一个字符串并进行比较...这适用于文件名相同但标题不同的文件。然而,这可能会对某些数据产生奇怪的影响。

          usort($filesContent, function($a, $b) {
              return strcmp($a->getName().$a->getTitle(), $b->getName().$b->getTitle());
          });
    

    您最好先按名称排序,然后如果比较返回 0 表示它们相同,则按标题排序。

          usort($filesContent, function($a, $b) {
              $nameSort = strcmp($a->getName(), $b->getName());
              if($nameSort == 0) return strcmp($a->getTitle(), $b->getTitle());
              return $nameSort;
          });
    

    【讨论】:

    • 谢谢,如果数据有标题和名称,这可以工作吗?
    猜你喜欢
    • 2021-04-23
    • 2014-05-14
    • 1970-01-01
    • 2019-05-29
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多