一些php数组排序函数示例总结
回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案。为了记住它们,我决定来一个数组排序函数大总结。
首先接触的就是PHP数组排序、降序的排序问题。
sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。
asort:对数组进行排序并保持索引关系
arsort:对数组进行逆向排序并保持索引关系
ksort:对数组按照键名排序,保留键名到数据的关联
krsort:对数组按照键名逆向排序,保留键名到数据的关联
natsort:对字母数字字符串进行排序并保持原有键/值的关联
natcasesort:同natsort排序算法,但不区分大小写字母排序
PHP 数组排序(sort)
数字索引数组排序:
函数:sort(array, [sort type])
说明:sort()函数按升序对指定数组(第一个参数)进行排序。
sort函数第二参数作用为指定排序类型,是可选参数,可能的值为:
SORT_REGULAR: 默认值,不改变类型进行排序;
SORT_NUMERIC: 把值作为数字进行排序;
SORT_STRING: 把值作为字符串进行排序;
如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;
一、一维数组
假设有一个一维数组,如下:
$sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
print_r()输出的原始数组结果为:
Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )
1.sort()函数:根据数组下标进行升序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):
1
Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )
2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):
Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )
3.asort()函数:根据数组的键名进行升序排列;
print_r()输出的数组结果为:
1
Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )
4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;
print_r()输出的数组结果为:
Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )
5.ksort()函数:根据数组的键值进行升序排列;
print_r()输出的数组结果为:
Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )
6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;
print_r()输出的数组结果为:
代码如下 | 复制代码 |
|
7.reverse_array()函数:反向当前的数组排列顺序;
print_r()输出的数组结果为:
代码如下 | 复制代码 |
Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 ) |
8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);
print_r()输出的数组结果为(只是其中一种随机排列):
Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )
二、二维数组
假设有一个二维数组,如下:
代码如下 | 复制代码 |
$person = array( 1 |
二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:
1.按每维的第一个元素升序排列,代码如下:
代码如下 | 复制代码 |
function compare0($x, $y) { 1 |
2.按每维的第三个元素升序排列,代码如下:
代码如下 | 复制代码 |
function compare2($x, $y) {
|
3.按每维的第三个元素升序排列,代码如下:
代码如下 | 复制代码 |
function reverse_compare2($x, $y) { if($x[2] == $t[2]) { return 0; } elseif ($x[2] < $y[2]) { return 1; //改变后即可反向 } else { return -1; //改变后即可反向 } } usort($person, reverse_compare2); |
echo "按第三个元素反向排序:";
print_r($person);
输出的结果如下:
1
按第三个元素反向排序:
代码如下 | 复制代码 |
Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) |
呵呵,是不是代码多了点,记下了以后方便查阅啊!
例
代码如下 | 复制代码 |
<?php /** $array = array(100, 1000, 1, 10000); |
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
echo — 输出一个或者多个字符串
Descrīption
void echo ( string arg1 [, string ...] ) //返回值为空
代码如下 | 复制代码 |
echo "你好","朋友"; |
print –输出一个字符串
Descrīption
int print ( string arg )//返回值为整形
代码如下 | 复制代码 |
print "你好朋友"; |
可以进行下面操作
代码如下 | 复制代码 |
$name=print "nihao n"; |
print_r — 打印关于变量的易于理解的信息。
bool print_r ( mixed expression [, bool return] ) //返回值是布尔型的,参数是mix类型的,可以是字符串,整形,数组,对象类print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
print_r() 将把数组的指针移到最后边。
你可以
print_r(str);
print_r(int);
print_r(array);
print_r(obj);
下面我们一个个举例说明一下
四种方法可以输出字符串。 echo
print()
printf()
print_r()
echo
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
语法正确: echo "Hello", "World";
语法错误: echo ("Hello", "World");
print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。如,
代码如下 | 复制代码 |
if (!print("Hello, World")){ die("you are not listening to me"); } |
printf()
printf()源于C语言中的printf()。该函数输出格式化的字符串。
语法: printf(format,arg1,arg2,arg++)
format 规定字符串以及如何格式化其中的变量;
arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
Example: ?php
代码如下 | 复制代码 |
$str = "Hello"; $number = 123; printf("%s world. Day number %u",$str,$number); ?> |
如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入 % 符号之后,由数字和 "$" 组成。请参见例子 3。
Example: ?php
代码如下 | 复制代码 |
$number = 123; printf("With 2 decimals: %1$.2fbr />With no decimals: %1$u",$number); ?> |
print_r()和var_dump()
print_r()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。如,
代码如下 | 复制代码 |
$a = array('name' => 'Fred', 'age' => '15', 'wife' => 'Wilma'); print_r($a); { [name] => Fred [age] => 15 [wife] => Wilma } |
对象也一样。如,
代码如下 | 复制代码 |
class P { var $name = 'nat'; // ... } $p = new P; print_r($p); { [name] => nat } |
但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"n"。因此用var_dump()函数更适合调试
本文章来给大家介绍一些常用的php获取数组中随机数组的一些实例程序,希望此方法对各位朋友有所帮助哦。贴一段代码,在php中获取随机数组 不用多说,直接贴代码,php中的array_rand很变态,突破了正常人的理解,繁琐
例1
代码如下 | 复制代码 |
function create_random_ids( $min,$max,$limited ) |
例2
代码如下 | 复制代码 |
<?php |
第一次得到的结果为:
第二次得到的结果为:
第三次得到的结果为:很多朋友可能分不清楚在php中静态变量与静态方法的用法与区别在哪里,下面我来根据自己的经验来介绍静态变量与静态方法一些理解。
在PHP中,静态变量的解释是存在于类作用域的变量,在第一次初始化时给变量赋值,以后类初始化时,静态变量将不会再被重新赋值,主要用于一个类具有多个实例时的变量共享,以下为PHP的静态变量使用代码:
使用静态变量
变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:
例子 7-4. 演示需要静态变量的例子
代码如下 | 复制代码 |
<?php function Test () { $a = 0; echo $a; $a++; } ?> |
本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:
例子 7-5. 使用静态变量的例子
代码如下 | 复制代码 |
<?php |
现在,每次调用 Test() 函数都会输出 $a 的值并加一。
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:
例子 7-6. 静态变量与递归函数
代码如下 | 复制代码 |
<?php $count++; |
注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。
例子 7-7. 声明静态变量
代码如下 | 复制代码 |
<?php $int++; |
静态方法
代码如下 | 复制代码 |
class Apple extends Fruit { Apple::find("Apple"); 程序运行结果: 1 I'm Apple |
Program List:重写基类方法
在派生类重写基类的方法。
代码如下 | 复制代码 |
class Apple extends Fruit static function Color() Apple::Foo(); // This time it works.
Apple's color is red |
Program List:静态数组的使用
静态和const作用域都可以用::操作符访问,如果你想使用::操作符访问数组,你需要事先将数组声明为静态
代码如下 | 复制代码 |
<?php class Apple class Banana new Apple(); // prints array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" } |
Program List:再来一个单例模式
Static真的很酷,下面的程序演示了如何获得一个已经存在的实例。
代码如下 | 复制代码 |
private static $instance=null; private function __construct($value) { public static function getInstance() { } $x = Singleton::getInstance(); |
例
静态变量与静态方法
代码如下 | 复制代码 |
class A { |
输出结果为11,可以看到类A在第二次实例化后,静态变量$i依然与上一次实例化时后设定的$i值是一致的。用java来解释,其实就是一个类的静态变量在多个实例中都使用了一个内存空间,我觉得这样解释更加便于理解。因为静态变量和静态方法不需要实例化就可以使用,因而在文件被加载后静态变量就会初始化,而静态方法则会被注册。这也就可以理解,为什么java类的入口会这样的了:
代码如下 | 复制代码 |
public static void main(String[] args) |
我以前一直觉得由于静态方法不需要实例化就可以直接使用,节约了实例化的巨大开销,因而在使用一个类的方法时我更加倾向于直接静态调用而避免实例化。对于这个问题,我与同事已经争论过很多次,他不主张静态调用主要有以下想法:
1.实例化类更加符合面向对象编程的思想;
2.静态调用方法并不能在消耗上有较大的节约。
对于这个问题,我还是坚持自己的观点,但也并不是无论什么时候都使用静态调用。我主要有以下想法:
1.由于静态变量在文件被载入时就会被初始化,因此如果有多个类,并且类中存在多个静态变量与方法,势必在还未实例化时已消耗较多的内存(未验证)。所以对于访问不频繁或特殊需要,不建议将一个方法设为static;
2.对于调用较为频繁的类,我强烈建设使用static静态和静态方法,不仅可以共享内存空间,还可以共享数据。细心就会发现目前主流的PHP框架的基类都是使用的静态调用方法。
PHP date()参数说明
这里主要用到了 w 这个参数,关于这个参数的解释是:
w 表示星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
有了这个一切就很简单了,作者这里就直接贴代码了,细节不解释:
简单的获取星期几,其实就是date函数的用法
date("l");
//data就可以获取英文的星期比如Sunday
date("w");
//这个可以获取数字星期比如123,注意0是星期日
获取中文星期可以这样
代码如下 | 复制代码 |
$weekarray=array("日","一","二","三","四","五","六"); |
获取指定日期是:
代码如下 | 复制代码 |
$weekarray=array("日","一","二","三","四","五","六"); |
例
代码如下 | 复制代码 |
<?php 或者 <?php |
phP的date函数是有时间范围区间的,即只能从1970~2038年,因此在这个区间范围之外的算法都是不准的。那倒底怎么算呢?其实是有一个公式的:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公 式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的 13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期5。
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- 下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25