PHP数组排序函数array_multisort()函数详解
web PHP 2019-04-26 1947 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

6440441 2612 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列

先举个例子:
例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边的程序运行结果:

<?php 
$a = array(100,80,50,10,0);
$b = array("c","f","q","e","z");
array_multisort($a,$b);
print_r($a); // Array ( [0] => 0 [1] => 10 [2] => 50 [3] => 80 [4] => 100 ) 
print_r($b); // Array ( [0] => z [1] => e [2] => q [3] => f [4] => c )
?>
很显然本来是数组b第五个元素的z被排到了第一位!
其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它数组都按照第一个数组的调整策略进行调整……其实这个多维数组排序算法的最基本体现!
不过需要注意的是:两个数组的元素个数必须相同,不然就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in 
好了,希望上边的大家也能用上,咱们还是说主要的吧:array_multisort()对多维数组进行排序,这个功能将来做项目的时候是非常有用的!
首先我们看看对多维数组的每一元素[数组]进行排序的操作方法,很简单,但是有几个参数需要说明一下,如果您对sql有所了解一看估计就明白了:
<?php 
// 让我们来构造一个多维数组
$a = array(100, 2, 4, 7, 7);
$b = array('ab', 'ac', 'ad', 'ag', 'ap');

$ab = array($a, $b);
// 开始排序
array_multisort($ab[0], SORT_NUMERIC, SORT_DESC, $ab[1], SORT_STRING, SORT_ASC);
var_dump($ab);
// array (size=2)
  // 0 => 
    // array (size=5)
      // 0 => int 100
      // 1 => int 7
      // 2 => int 7
      // 3 => int 4
      // 4 => int 2
  // 1 => 
    // array (size=5)
      // 0 => string 'ab' (length=2)
      // 1 => string 'ag' (length=2)
      // 2 => string 'ap' (length=2)
      // 3 => string 'ad' (length=2)
      // 4 => string 'ac' (length=2)
?>
说明一下:
首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC声明顺序是逆序(从大到小),
然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)
最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同的数值则按照$ab[1]的顺序排列,输出结果如下:
Array (
[0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
[1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)
是不是很像在数据库中用order by?其实真的差不多!
现在我们再看一个更加贴近实际应用的例子:

<?php
$array[] = array("age" => 20, "name" => "li");
$array[] = array("age" => 21, "name" => "ai");
$array[] = array("age" => 20, "name" => "ci");
$array[] = array("age" => 22, "name" => "di");
foreach ($array as $key => $value) {
    $age[$key] = $value['age'];
    $name[$key] = $value['name'];
} 
array_multisort($age, SORT_NUMERIC, SORT_DESC, $name, SORT_STRING, SORT_ASC, $array);
var_dump($array);
// array (size=4)
  // 0 => 
    // array (size=2)
      // 'age' => int 22
      // 'name' => string 'di' (length=2)
  // 1 => 
    // array (size=2)
      // 'age' => int 21
      // 'name' => string 'ai' (length=2)
  // 2 => 
    // array (size=2)
      // 'age' => int 20
      // 'name' => string 'ci' (length=2)
  // 3 => 
    // array (size=2)
      // 'age' => int 20
      // 'name' => string 'li' (length=2)
?>
这个例子的$array[]数组,是按照数据库中读出的记录来构造的,我们现在对他们按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序。这样的排序才是我们将来会经常用的到的,
因为array_multisort()需要的排序参数必须是一个列,所以我们用foreach把这个数组的年龄和姓名读出来,之后呢?
就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需要列,还没见过用行数据进行排序的呢!

输出结果如下——正如我们所想的:
Array (
[0] => Array ( [age] => 22 [name] => di )
[1] => Array ( [age] => 21 [name] => ai )
[2] => Array ( [age] => 20 [name] => ci )
[3] => Array ( [age] => 20 [name] => li )
)

看到了吧,其实也很简单,就是那几个需要大写的参数有点烦人而已!虽说也有点难以理解,但是理解了就好了,将来很有用的哦!

版权声明:本篇文章来源于网络。 来源链接

相关推荐
php实现ZIP压缩文件解压缩,中文乱码解决方法(重要)
PHP | 2019-04-30 5625
直接上代码,具体代码里面都有注释。直接中文压缩文件解压到中文文件夹。 <?php // 需开启配置 php_zip.dll // phpinfo(); header("Content-type:text/html;charset=utf-8"); /* * $filename 被解压文件名 * $path 解压...
openssl_private_decrypt解密失败
PHP | 2019-01-16 5597
复制别人的解密程序,原程序可以解密,复制过来就不可以 一步步尝试发现,秘钥换行符有区别, 原秘钥有换行符,复制过来不知道什么时候把换行符清空了,成了一行字符串了。
评论:0条
评论加载中...
发表评论