使用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