ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3051|回复: 9

[细说PHP] 第9章PHP中的数组与数据结构--数组的相关处理函数(四)

[复制链接]
发表于 2013-8-5 15:40:49 | 显示全部楼层 |阅读模式
函数array_slice():在数组中根据条件取出一段值并返回。

<?php
        //声明一个索引数组$lamp包含4个元素
        $lamp = array( "Linux", "Apache", "MySQL", "PHP" );
       
        //使用array_slice()从第二个开始取(0是第一个,1为第二个),取两个元素从数组$lamp中返回
        print_r( array_slice( $lamp, 1, 2 ) );       //输出:Array ( [0] => Apache [1] => MySQL )
       
        //第二个参数使用负数参数为-2,从后面第二个开始取,返回一个元素
        print_r( array_slice( $lamp, -2, 1 ) );      //输出: Array ( [0] => MySQL )
       
        //最后一个参数设置为 true,保留原有的键值返回
        print_r( array_slice( $lamp, 1, 2, true ) ); //输出:Array ( [1] => Apache [2] => MySQL )

        //声明一个关联数组
        $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"MySQL", "d"=>"PHP" );         
   
        //如果数组有字符串键,默认所返回的数组将保留键名
        print_r( array_slice($lamp, 1, 2) );         //输出:Array ( [b] => Apache [c] => MySQL )
回复

使用道具 举报

 楼主| 发表于 2013-8-5 15:44:39 | 显示全部楼层
函数array_splice():选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替。

<?php
        $input = array( "Linux", "Apache", "MySQL", "PHP" );
        //原数组中的第二个元素后到数组结尾都被删除
        array_splice($input, 2);                                           
        print_r($input);                                           //输出:Array ( [0] => Linux [1] => Apache )

        $input = array("Linux", "Apache", "MySQL", "PHP");
        //从第二个开始移除直到数组末尾倒数第1个为止中间所有的元素
        array_splice($input, 1, -1);                                 
        print_r($input);                                           //输出:Array ( [0] => Linux [1] => PHP )

        $input = array( "Linux", "Apache", "MySQL", "PHP" );
        //从第二个元素到数组结尾都被第4个参数替代
        array_splice($input, 1, count($input), "web");          
        print_r($input);                         //输出:Array ( [0] => Linux [1] => web )

        $input = array( "Linux", "Apache", "MySQL", "PHP" );
        //最后一个元素被第4个参数数组替代
        array_splice($input, -1, 1, array("web", "www"));       
        print_r($input); //输出:Array ( [0] => Linux [1] => Apache [2] => MySQL [3] => web [4] => www )

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:55:24 | 显示全部楼层
函数array_combine()

<?php
        $a1 = array( "OS", "WebServer", "DataBase", "Language" ); //声明第一个数组作为参数1
        $a2 = array( "Linux", "Apache", "MySQL", "PHP");          //声明第二个数组作为参数2
       
        print_r( array_combine( $a1, $a2 ) );                     //使用arrray_combine()将两个数组合并

        /* 输出:Array ( [OS] => Linux [WebServer] => Apache [DataBase] => MySQL [Language] => PHP ) */


回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:56:56 | 显示全部楼层

函数array_merge()

<?php
        $a1 = array( "a"=>"Linux", "b"=>"Apache" );
        $a2 = array( "c"=>"MySQL", "b"=>"PHP" );
       
        print_r( array_merge( $a1, $a2 ) ); //输出: Array ( [a] => Linux [b] => PHP [c] => MySQL )
       
        //仅使用一个数组参数则键名以0开始进行重新索引
        $a = array( 3=>"PHP", 4=>"MySQL" );

        print_r( array_merge( $a ) );                 //输出:Array ( [0] => PHP [1] => MySQL )


回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:57:57 | 显示全部楼层
函数array_intersect()

<?php
        $a1 = array( "Linux", "Apache", "MySQL", "PHP" );        //声明第一个数组,作为比较的第一个参数
        $a2 = array( "Linux", "Tomcat", "MySQL", "JSP" );        //声明第二个数组,作为比较的第二个参数

        print_r( array_intersect( $a1, $a2 ) );                   //输出Array ( [0] => Linux [2] => MySQL ) 





回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 15:58:31 | 显示全部楼层
函数array_diff()

<?php
        $a1 = array( "Linux", "Apache", "MySQL", "PHP" );        //声明第一个数组,作为比较的第一个参数
        $a2 = array( "Linux", "Tomcat", "MySQL", "JSP" );        //声明第二个数组,作为比较的第二个参数

        print_r( array_diff( $a1, $a2 ) );                         //输出:Array ( [1] => Apache [3] => PHP )

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 16:02:03 | 显示全部楼层
使用数组实现堆栈

<?php
        $lamp = array("Web");                         //声明一个数当做栈,数为数组array_push()函数第一个参数
        echo array_push( $lamp, "Linux" );        //将字符串“Linux”压入数组$lamp中,返回数组中元素个数2
        print_r($lamp);                               //输出数组中(栈)成员:Array ( [0] => Web [1] => Linux )

    //又连续压入三个数据到数组$lamp的尾部,栈中元素的长度将为5个
        echo array_push( $lamp, "Apache", "MySQL", "PHP" );       
        print_r( $lamp );  //输出: Array ( [0] => Web [1] => Linux [2] => Apache [3] => MySQL [4] => PHP )

        $lamp = array( "a"=>"Linux", "b"=>"Apache" );         //带有字符串键的数组
        echo array_push( $lamp, "MySQL", "PHP" );              //压入两个元素到数组的尾部, 输出栈长度为4
        print_r( $lamp );  // Array ( [a] => Linux [b] => Apache [0] => MySQL [1] => PHP )  
   
    //使用array_push()函数和使用这种直接赋值初始化数组的方式是一样的
    $lamp["web"] = "www";   
        print_r($lamp);   //Array ( [a] => Linux [b] => Apache [0] => MySQL [1] => PHP [web] => www )

        //声明一个数组作为栈
        $lamp = array( "Linux", "Apache", "MySQL", "PHP");       
       
        echo array_pop( $lamp );          //弹出数组中最后的元素并返回被删除的值,输出PHP
        print_r( $lamp );                 //被弹出后的结果:Array ( [0] => Linux [1] => Apache [2] => MySQL )

        echo array_pop( $lamp );          //再弹出数组中最后的元素并返回被删除的值,输出MySQL
        print_r( $lamp );                 //被弹出后的结果:Array ( [0] => Linux [1] => Apache )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 16:10:50 | 显示全部楼层
使用数组实现队列
可使用array_unshift()函数在队列数组的开头插入一个或多个元素,该函数执行成功将返回插入元素个数,使用格式和array_push()一样。

<?
        //带有字符串键值的关联数组
        $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"MySQL", "d"=>"PHP" );
        echo array_shift( $lamp );  //删除数组第一个元素并返回,输出Linux
        print_r ($lamp);                 //字符串键值保持不变:Array ( [b] => Apache [c] => MySQL [d] => PHP )




        //带有数字键的索引数组
        $lamp = array("Linux", "Apache", "MySQL", "PHP");
        echo array_shift($lamp);           //删除数组第一个元素并返回,输出Linux
        print_r ($lamp);                  //数字下标重新索引Array ( [0] => Apache [1] => MySQL [2] => PHP ) 




回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 16:16:42 | 显示全部楼层
其它有用的数组处理函数

函数array_rand()
<?php
        $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"MySQL", "d"=>"PHP" );
       
        echo array_rand( $lamp,1 );                    //随机从数组$lamp中取1个元素的键值,例如b
        echo $lamp[array_rand($lamp)]."<br>";         //通过随机的一个元素的键值获取数组中一个元素的值
       
        $key = array_rand( $lamp,2 );           //随机从数组$lamp中取2个元素的键值赋给数组$key
       
        echo $lamp[$key[0]]."<br>";                  //通过数组$key中第一个值获取数组$lamp中一个元素的值
        echo $lamp[$key[1]]."<br>";                  //通过数组$key中第二个值获取数组$lamp中另一个元素的值
?>


函数shuffle()
<?php
        $lamp = array( "a"=>"Linux", "b"=>"Apache", "c"=>"MySQL", "d"=>"PHP" );
       
        shuffle( $lamp );             //将传入的数组$lamp按随机顺序重新排列
        print_r( $lamp );             //每执行一次shuffle()函数则返回不同顺序的数组
?>


函数array_sum()
<?php
        $a = array( 0=>"5", 1=>"15", 2=>"25" );

        //使用array_sum()函数返回数组中元素的总和,输出:45
        echo array_sum( $a );                              
?>


函数 range()
<?php
        $number = range( 0, 5 );            //使用range()函数声明元素值为0-5的数组
        print_r( $number );               //输出Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )

        $number = range( 0, 50, 10 ); //使用range()函数声明元素值为0-50的数组,每个元素之间的步长为10
        print_r( $number );                 //输出Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 )

        $letter = range( "a", "d" );  //还可以使用range()函数声明元素连续的字母数组,声明字母a-d的数组
        print_r( $letter );                  //获得的数组输出Array ( [0] => a [1] => b [2] => c [3] => d )
?>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 16:24:31 | 显示全部楼层
操作PHP数组需要注意的一些细节


数组运算符
<?php
        //声明两个数组,前两个元素下标相同,测试是否后面的会覆盖前面的
        $a = array( "a"=>"Linux", "b"=>"Apache");
        $b = array( "a"=>"PHP", "b"=>"MySQL", "c"=>"web" );
       
        $c = $a + $b;         //使用“+”合并两个数组,$a在前, $b在后,因为前两个下标相同, $b会覆盖
        echo "合并后的 \$a 和 \$b: \n";
        print_r($c);        //结果: Array ( [a] => Linux [b] => Apache [c] => web )
       
        $c = $b + $a;        //使用“+”合并两个数组,$b在前, $a在后,因为前两个下标相同, $a会覆盖
        echo "合并后的 \$a 和 \$b: \n";
        print_r($c);        //结果:  Array ( [a] => PHP [b] => MySQL [c] => web )
?>

<?php
        $a = array( "PHP", "MySQL" );
        $b = array( 1=>"MySQL", "0"=>"PHP" );
       
        var_dump( $a == $b );                //结果:bool(true)相等
        var_dump( $a === $b );                //结果:bool(false)不相等,"0"是字符串类型
?>


删除数组中的元素操作
<?php
        $a = array( 1=>'one', 2=>'two', 3=>'three' );
       
        //删除数组中下标为2的第二个元素
        unset( $a[2] );
       
        /*
                数组是 $a = array( 1=>'one', 3=>'three' );
                而不是 $a = array( 1=>'one', 2='trhee' );
        */
       
        //如果使用array_values()重新建立索引
        $b = array_values( $a );
       
        /* 现在变量$b是: array(0=>'one', 1=>'three'),下标会重新建立索引 */
?>


关于数组下标的注意事项
<?php
        $array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9 );
       
        for($i=0; $i<count($array); $i++) {
                echo "<br>查看 $i: <br>";
                echo "坏的:".$array['$i']."<br>";   //给变量$i加了引号了,有问题
                echo "好的:".$array[$i].'<br>';
                echo "坏的:{$array['$i']}<br>";         //给变量$i加了引号了,有问题
                echo "好的:{$array[$i]}<br>";       
        }
?>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 18:19 , Processed in 0.037162 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表