使用PHP对多维数组进行排序

在PHP中,对数组进行排序很容易,这要归功于内置的排序功能。但是,在对多维数组进行排序时,您需要以某种方式使用这些函数,尤其是当您想要更改要作为排序依据的数据项时。

遵循以下定义的数组,这些内容选自BBC网站“科学与自然”部分的头条新闻。

$bbcNews = array(

 array('Martian soil frustrates Phoenix','7442233','Science/Nature','Saturday, 7 June 2008 00:25'),

 array('Natural lab shows sea\'s acid path','7437862','Science/Nature','Sunday, 8 June 2008 18:08'),

 array('Hints of "time before Big Bang"','7440217','Science/Nature',' Friday, 6 June 2008 15:43'),

 array('Bacteria could stop frog killer','7438205','Science/Nature','Friday, 6 June 2008 08:46')

);

为了按任何项目对数组进行排序,我将使用PHP函数usort()。该函数有两个参数,第一个是要排序的数组,第二个是将用作回调函数的字符串,以允许在一项和下一项之间进行比较。所有排序复杂度都在幕后进行了排序,您要做的就是让比较函数在两个值相同时返回0,在第一个值小于2时返回负数,在第二个值小于2时返回正数。第一个大于第二个。以下代码将在数组上运行sort函数,因为对数组本身进行了排序,所以它没有返回值。

usort($bbcNews, 'sortcompare');

在定义sortcompare()函数之前,我们将使用一个变量来存储希望排序的数组项。此变量称为$sort_field。

$sort_field = 1; //输入要排序的字段数

为了使用此变量,我们将使用全局命令将其包括在函数范围内。目前,这将导致函数按新闻文章的ID号(数组中的第二项)进行排序。只需将其更改为要作为排序依据的任何数组项即可。请记住,与所有PHP数组一样(除非另行设置),该数字从零开始。

这是用于对数组进行排序的回调函数。它分为三个部分。首先,它尝试将字符串转换为日期,如果成功,它将基于前面提到的负值,零值和正值返回一个比较值。如果两个值都不能转换为日期,则检查它们是否为数字。如果这两种情况都不成立,则将strcasecmp()在两个字符串上运行PHP函数。这是一个不区分大小写的二进制安全字符串比较功能。

// 比较函数

function sortcompare($a, $b) {

 // 包括$sort_field变量

 global $sort_field;

 if ( ($timea = strtotime($a[$sort_field])) !== false && ($timeb = strtotime($b[$sort_field]))!==false ) {

  // 时间比较

  if ( $timea ==$timeb ) {

   return 0;

  }

  return ($timea < $timeb) ? -1 : 1;

 } elseif ( is_numeric($a[$sort_field]) && is_numeric($b[$sort_field]) ) {

  // 数值排序

  if($a[$sort_field] ==$b[$sort_field]){

   return 0;

  }

  return ($a[$sort_field] < $b[$sort_field]) ? -1 : 1;

 } else {

  // 普通不区分大小写的字符串比较

  return strcasecmp($a[$sort_field], $b[$sort_field]);

 }

}

要输出此函数的输出,请使用以下代码。这将通过完全打印出阵列来验证该功能是否有效。

echo '<pre>' . print_r($bbcNews,true) . '</pre>';

 

以上是 使用PHP对多维数组进行排序 的全部内容, 来源链接: utcz.com/z/327657.html

回到顶部