1.对一个很大的数组,能比较快的实现去重
php中的array_unique移除数组中重复的值并返回数组,当存在元素相等时,只会保留第一个元素,保持键值不变。但是当数组比较大时速度会比较慢,我们需要想到其他更快的办法实现数组去重。有一个比较好而且更快的方法,array_flip函数反转数组中所有的键以及它们关联的值,由于键值唯一性,键值将是跟array_unique一样的结果,然后再次使用array_flip函数可以得到跟array_unique一样的结果。
1 /* 创建一个包含重复值的,一共四个元素的数组 */ 2 $array = array(\'green\',\'blue\',\'orange\',\'blue\'); 3 4 /* 翻转数组,你将会得到唯一键值的数组 5 array(\'green\'=>0,\'blue\'=>1,\'orange\'=>2); */ 6 $array = array_flip($array); 7 8 /* 然后再翻转一次,将键和值重新放置,然后得到数组:array(0=>\'green\',1=>\'blue\',2=>\'orange\'); */ 9 $array = array_flip($array);
由于上述的操作可能会导致数组的键值不连续,可以采用下面两种方法将数组的键值重新排序:
1.使用array_merge函数修复数组的键值
1 $array = array(\'green\',\'blue\',\'orange\',\'blue\'); 2 $array = array_flip($array); 3 $array = array_flip($array); 4 5 /* 使用array_merge()函数修复键值*/ 6 $array = array_merge($array);
2.使用array_keys函数得到数组的键值,并且键值重新排序,这时候可以少执行一次array_flip函数
1 $array = array(\'green\',\'blue\',\'orange\',\'blue\'); 2 $array = array_flip($array); 3 /* 跟第一个例子一样,但是现在我们先提取数组的键值 */ 4 $array = array_keys($array);
用上面的方法对待大数组的去重会有性能的提升。
2.array_column返回数组中指定的一列,需要注意只有php5.5以上才能使用该函数,否则需要自己定义该函数
<?php $records = array( array( \'id\' => 2135, \'first_name\' => \'John\', \'last_name\' => \'Doe\', ), array( \'id\' => 3245, \'first_name\' => \'Sally\', \'last_name\' => \'Smith\', ) ); $first_names = array_column($records, \'id\'); print_r($first_names); //结果 array(\'2135\',\'3245\'); ?>
3.array_multisort函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序
需要注意的是:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增;可以在每个数组后设置排序顺序和排序类型参数
1 <?php 2 $a1=array("Dog","Cat"); 3 $a2=array("Fido","Missy"); 4 array_multisort($a1,$a2); 5 print_r($a1); 6 print_r($a2); 7 ?> 8 9 //输出 10 Array 11 ( 12 [0] => Cat 13 [1] => Dog 14 ) 15 Array 16 ( 17 [0] => Missy 18 [1] => Fido 19 )
当两个值相同时如何排序
<?php $a1=array("Dog","Dog","Cat"); $a2=array("Pluto","Fido","Missy"); array_multisort($a1,$a2); print_r($a1); print_r($a2); ?> //输出 Array ( [0] => Cat [1] => Dog [2] => Dog ) Array ( [0] => Missy [1] => Fido [2] => Pluto )
使用排序参数
<?php $a1=array("Dog","Dog","Cat"); $a2=array("Pluto","Fido","Missy"); array_multisort($a1,SORT_ASC,$a2,SORT_DESC); print_r($a1); print_r($a2); ?> //输出 Array ( [0] => Cat [1] => Dog [2] => Dog ) Array ( [0] => Missy [1] => Pluto [2] => Fido )
合并两个数组,并按数字降序排列
1 <?php 2 $a1=array(1,30,15,7,25); 3 $a2=array(4,30,20,41,66); 4 $num=array_merge($a1,$a2); 5 array_multisort($num,SORT_DESC,SORT_NUMERIC); 6 print_r($num); 7 ?> 8 9 //输出 10 Array 11 ( 12 [0] => 66 13 [1] => 41 14 [2] => 30 15 [3] => 30 16 [4] => 25 17 [5] => 20 18 [6] => 15 19 [7] => 7 20 [8] => 4 21 [9] => 1 22 )
4.array_unshift
用于向数组插入新元素,新数组的值将被插入到数组的开头,该函数会返回数组中元素的个数,需注意:数值键名将从 0 开始,以 1 递增。字符串键名将保持不变。
1 $a=array("a"=>"red","b"=>"green"); 2 array_unshift($a,"blue"); 3 print_r($a); 4 5 //结果 6 Array 7 ( 8 [0] => blue 9 [a] => red 10 [b] => green 11 )
使用数字键值
1 $a=array(0=>"red",1=>"green"); 2 array_unshift($a,"blue"); 3 print_r($a); 4 5 //结果 6 Array 7 ( 8 [0] => blue 9 [1] => red 10 [2] => green 11 )
5.simplexml_load_string函数把xml字符串载入到对象中
1 <?php 2 $xmlstring = <<<XML 3 <?xml version="1.0" encoding="ISO-8859-1"?> 4 <note> 5 <to>George</to> 6 <from>John</from> 7 <heading>Reminder</heading> 8 <body>Don\'t forget the meeting!</body> 9 </note> 10 XML; 11 12 $xml = simplexml_load_string($xmlstring); 13 14 var_dump($xml); 15 ?> 16 17 //输出 18 object(SimpleXMLElement)#1 (4) 19 { 20 ["to"]=> string(4) "George" 21 ["from"]=> string(4) "John" 22 ["heading"]=> string(8) "Reminder" 23 ["body"]=> string(29) "Don\'t forget the meeting!" 24 }
6.php中list的使用
list是把数组中一些值赋值給变量,并且赋值时默认从索引0开始赋值,看下面的运行结果就好了
1 $my_array = array(\'Dog\', \'Cat\', \'Horse\'); 2 list($a, , $c) = $my_array; 3 4 echo $a; 5 echo \'<br />\'; 6 echo $c; 7 8 //结果 9 Dog 10 Horse
1 $my_array = array(1 => \'Dog\', 2 => \'Cat\', 3 => \'Horse\'); 2 // $my_array = array(\'Dog\', \'Cat\', \'Horse\'); 3 list($a, , $c) = $my_array; 4 5 echo $a; 6 echo \'<br />\'; 7 echo $c; 8 9 //结果 11 12 Cat