silence-scorpion

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

分类:

技术点:

相关文章: