【问题标题】:PHP Using Usort to sort a multidimensional arrayPHP使用Usort对多维数组进行排序
【发布时间】:2023-03-31 19:03:01
【问题描述】:

我见过类似的问题,我只是不明白答案。希望如果我专门询问我的代码,将会点击。我被困了一段时间,非常感谢您的帮助。

我有一个数组: foreach ($showresult 作为 $display) { $display_result[] = array ('parkid' =>$display['parkid'],

                 'trailsys' =>$display['trailsys'],

                         'trailset' =>$display['trailset'],

                         'name' =>$display['name'], 

                         'description' =>$display['description'], 

                         'url' =>$display['url'], 

                                 'ldes' =>$display['ldes'],

                                 'ltxt' =>$display['ltxt'],

                         'address' =>$display['address'], 

                         'city' =>$display['city'], 

                         'zip' =>$display['zip'], 

                         'phone' =>$display['phone'], 

                         'pos' =>$display['pos'],   

                         'T1' => $display['systemname'],

                 'T2'=> $display['name']);

 {                           'state' =>$display['state'], 

数组中的每一项在 T1 中都有一个值。 T2 可以有一个值,也可以是 0。我想按 T1 对列表进行字母排序。在某些情况下,会有三个或四个 T1 相同的条目,然后我想按 T2 的字母顺序排列它们。我被难住了。

请帮忙。

【问题讨论】:

标签: php arrays multidimensional-array usort


【解决方案1】:

您应该尝试使用 usort() 函数(http://www.php.net/usort)。它允许您按自定义函数对数组进行排序。所以,在你的情况下,它会是这样的:

<?
  usort($array,function($a,$b) {
    if ($a['T1'] < $b['T1']) return -1;
    elseif ($a['T1'] > $b['T1']) return 1;
    else {
      if ($a['T2'] < $b['T2']) return -1;
      elseif ($a['T2'] > $b['T2']) return 1;
      else return 0;
    }
  });
?>

您可以检查一下并根据自己的需要进行调整。

让我知道这是否适合你。

【讨论】:

  • 好吧,这就是我觉得愚蠢的地方。 $a 和 $b 代表什么?
  • 它们代表$array 的两个元素。这就是usort() 的工作原理。
  • $a 和 $b 是数组中的每一项。
  • 我收到以下错误:警告:usort() 期望参数 1 为数组,在第 59 行的 /home/ride4w5/public_html/test_site/test.php 中给出 null
  • 那么您的$array 为空。保存数组的变量是什么?
最近更新 更多