首页 >后端开发 >php教程 >PHP实现的多维数组排序算法分析

PHP实现的多维数组排序算法分析

不言
不言原创
2018-04-19 14:07:291261浏览

本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:

突然想起了一道面试题,把一个多维数组排序。

例:

<?php
//有一个多维数组
$a = array(
  array(&#39;key1&#39;=>940, &#39;key2&#39;=>&#39;blah&#39;),
  array(&#39;key1&#39;=>23, &#39;key2&#39;=>&#39;this&#39;),
  array(&#39;key1&#39;=>894, &#39;key2&#39;=>&#39;that&#39;)
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, &#39;myfunction&#39;)函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo &#39;Iteration:&#39;.$x[&#39;key1&#39;].&#39; vs &#39;.$y[&#39;key1&#39;];
  if($x[&#39;key1&#39;] > $y[&#39;key1&#39;]) {
    echo &#39;true<br/>&#39;;
    return true;
  }elseif($x[&#39;key1&#39;] < $y[&#39;key1&#39;]) {
    echo &#39;false<br/>&#39;;
    return false;
  }else {
    echo &#39;0&#39;;
    return 0;
  }
}
//进行排序
usort($a, &#39;asc_key1_sort&#39;);
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo &#39;Iteration:&#39;.$x[&#39;key2&#39;].&#39; vs &#39;.$y[&#39;key2&#39;].&#39;<br/>&#39;;
  return strcasecmp($x[&#39;key2&#39;], $y[&#39;key2&#39;]);
}
//进行排序
usort($a, &#39;asc_key2_sort&#39;);
var_dump($a);
?>

运行结果:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

如果我的多维数组中也有key值呢?

<?php
//有一个多维数组
$a = array(
  123 => array(&#39;key1&#39;=>940, &#39;key2&#39;=>&#39;blah&#39;),
  349 => array(&#39;key1&#39;=>23, &#39;key2&#39;=>&#39;this&#39;),
  43 => array(&#39;key1&#39;=>894, &#39;key2&#39;=>&#39;that&#39;)
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, &#39;myfunction&#39;)函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo &#39;Iteration:&#39;.$x[&#39;key1&#39;].&#39; vs &#39;.$y[&#39;key1&#39;];
  if($x[&#39;key1&#39;] > $y[&#39;key1&#39;]) {
    echo &#39;true<br/>&#39;;
    return true;
  }elseif($x[&#39;key1&#39;] < $y[&#39;key1&#39;]) {
    echo &#39;false<br/>&#39;;
    return false;
  }else {
    echo &#39;0&#39;;
    return 0;
  }
}
//进行排序
usort($a, &#39;asc_key1_sort&#39;);
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo &#39;Iteration:&#39;.$x[&#39;key2&#39;].&#39; vs &#39;.$y[&#39;key2&#39;].&#39;<br/>&#39;;
  return strcasecmp($x[&#39;key2&#39;], $y[&#39;key2&#39;]);
}
//进行排序
usort($a, &#39;asc_key2_sort&#39;);
var_dump($a);
?>

运行结果:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

这样的排序结果不会保留123,349,43。这时候只要把usort()换成uasort就好啦!

相关推荐:

php实现多维数组中每个单元值(数字)翻倍的方法,多维翻倍_PHP教程

以上是PHP实现的多维数组排序算法分析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn