开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PHP系列(三)PHP数组与数据结构

简介:
+关注继续查看

                PHP数组与数据结构

数组是把若干变量按有序的形式组织起来的一种形式。

这些数据元素的集

数组分为一维二维三维、索引数组(数组索引是整数)和关联数组

 

1)数组的声明

1、一个数组中存的多个内容、数组中的内容叫作“元素”

2、每个元素都是由健和值组成的Key/value

$a=array(“one”=>”111”,”two”=>”2222”);

3、下标有二种类型:一种是整数(索引数组)、一种是字符串(关联数组)

4[]{}来操作下标

5、在使用下标时、如果是关联数组、一定要使用引号、不要使用常量名称(各种类型都可以作下标、但会强制转换)

6、数组的自动增涨下标、默认从0开始、出现最大值加1

7、关联数组的字符串下标、不影响索引下标的排列规则

8、使用array()函数声明数组、默认索引下标从0开始

9、使用=>符号指定下标

Php5.4以后可以像其他语言一样声明数组$arr=[“a”,”bb”];

10、删除数组中的一个元素使用unset(但不会重建索引)删除后重建用array_values()函数

二维数组(数组的数组)三维数组 $group=array(array(“1”,”2”), array(“1”,”2”),)

 

2for循环遍历数组

当数组下标不是连续的时候、For循环遍历不了数组

$arr=array(“aa”,”bb”,”cc”);

For($i=0;$i<count($arr);$i++){

         Echo$arr[$i].”<br>”;

}

 

3foreach循环遍历

数组有多少个元素、foreach就循环多少次

Foreach(数组 as自定义变理){

}

 

Foreach(数组 as 下标变理()=>自定义变理()){

}

$arr=array(“11”,”bb”);

Foreach($arras $key => $values){

         Echo “{$key}====>{$values}”

}

 

$arr= array(

         array("name"=>"ssw","age"=>22, "性别"=>"sex"),

         array("name"=>"ssw1","age"=>29, "性别"=>"six"),

         array("name"=>"ssw2","age"=>26, "性别"=>"sex")

);

 

echo"<table border='1' width='200'>";

echo"<caption>数组转为表格</caption>";

 

foreach($arras $row){

         echo "<tr>";

         foreach($row as $col){

                   echo"<td>".$col."</td>";

         }

         echo "</tr>";

}

echo"</table>";

 

(4)联合使用list() each() while()循环遍历使用

List()作用:

1、等号左边用list()函数、等号右边只能是一个数组

2、数组中有几个元素、在list()中就用几个参数、而且参数必须是变量、不能是值

3、只能将索引数组(下标是连续)、转为变理、是按下标0开始找的

4、可以在list()参数中通过、空项选择性接收数组中的元素

$str=”天涯_海角”;

List($name,$sea)=explode(“_”,$str);

Echo $name;

Echo $sea;

天涯

海角

 

Each()是一个函数、参数为数组、返回值也是一个数组

1、返回值是一个数组、数组有4个固定元素、下标固定的 value 0 下标key下标

2each()只处理当前元素、将当前元素转为数组信息、处理完后、指针向下一个元素移动

3、如果指定已经结束了、在使用each()获取元素、返回false

$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");

while(list($key,$val) = each($arr)){

echo"{$key}=>{$val}<br>";

}

显示:

one=>Thinkphp

two=>Yii

three=>smarty

 

5)数组内部指针遍历数组

控制指定的位置next(下一个)  prev(上一个)  end(最后一个)  reset(第一个)

Key()获取数组当前下标 current()获取数组当前值

$arr =array("one"=>"Thinkphp","two"=>"Yii", "three"=>"smarty");

 

Echo “当前位置:” . ”key($arr)”. ”==>” . ”current($arr)” . ”<br>”;

 

(6)php超全局数组

超全局数组(变量)在系统中已预定好的、可以直接调用

$_SERVER   服务器变量

$_ENV    环境变量

$_GET    http get变量  接收用户通过url向服务器传的参数

$_POST    http post变量  接收用户通过http协议向服务器传的参数

$_REQUEST    request变量  此关联数组包含$_GET $_POST$_COOKIE中全部内容

$_FILES    http文件上传变量

$_COOKIE    http cookies

$_SESSION    session变量

$_GLOBALS    global变量

 

Print_r($_SERVER);

 

7PHP常用数组函数

数组的键值操作函数(函数主要看功能 返回值)

Array_values()返回数组中所有的值,返回数组。

$sh=array(“shang”=>”上海”,””=>”海南”);

Print_r(Array_values($sh));

显示为:Array ( [0] => ”上海” [1] => ”海南” )

 

Array_keys(array,value,strict)返回数组中所有的键,返回数组。

Array为数组  value可选指定键值、然后只有该键值对应的键名被返回

Strict 可选 true 依赖类型 faLse不依赖类型

<?php

$a=array(10,20,30,"10");

print_r(array_keys($a,"10",true));

?>

显示为:Array ( [0] => 3 )

 

In_array(search, array,type)搜索数组中是否存在指定的值,返回真假。

Search 必需、规定要在数组搜索的值

Array 必需、规定要搜索的数组

Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

$sh=array(“shang”=>”上海”,””=>”海南”);

If(in_array(“上海”, $sh)){

         Echo“在数组中

}else{

         Echo“不在数组中”:

}

显示:在数组中

 

array_search(search,array, type)函数在数组中搜索某个键值,并返回对应的键名,如果没找到,则返回 false

Search 必需、规定要在数组搜索的值

Array 必需、规定要搜索的数组

Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

$a=array("a"=>"5","b"=>5,"c"=>"5");

echoarray_search(5,$a,true);

显示:b

 

Array_key_exists(search, array, type)搜索数组中是否存在指定的键,返回真假。

Search 必需、规定要在数组搜索的值

Array 必需、规定要搜索的数组

Type 可选、设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

$a=array("a"=>"5","b"=>5,"kong"=>null);

If(array_key_exists(“kong”, $a)){

         Echo“在数组中

}else{

         Echo“不在数组中”:

}

显示:在数组中

 

Array_flip(array)交换数组中所有的键名以及它们关联的键值、返回数组(只能处理整数和字符串)

$a=array("a"=>"5","b"=>5,"c"=>"cisoco");

print_r(array_flip($a));

显示:Array ( [5] => b [cisoco] => c )  //重复下标会被后面相同键名的覆盖

 

Array_reverse(array,preserve)将原数组中的元素顺序翻转,创建新的数组并返回

Array 必需、规定数组

Preserve可选(true/false)规定是否保留原始数组的键名

$a=array("a","b","c");

$reverse=array_reverse($a);

$preserve=array_reverse($a,true);

 

print_r($a);

echo"<br>";

print_r($reverse);

echo"<br>";

print_r($preserve);

显示为:

Array( [0] => a [1] => b [2] => c ) 
Array ( [0] => c [1] => b [2] => a )
 
Array ( [2] => c [1] => b [0] => a )

 

统计数组元素的个数与唯一性

 

Count(array,mode)返回数组中元素的数目(strlen是统计字符串长度)

Array 必需、规定数组

Mode 可选、0为不对多维数组统计、1递归统计数组中的元素

$cars=array

  (

 "Volvo"=>array( "XC60", "XC90"),

 "BMW"=>array("X3","X5"),

 "Toyota"=>array("Highlander")

  );

echo "常规计数:" .count($cars)."<br>";

echo "递归计数:" .count($cars,1);

显示为:

常规计数:3
递归计数:8

 

Array_count_values(array)统计数组中所有值出现的次数、返回一个数组

$a=array("A","Cat","Dog","A","Dog");

print_r(array_count_values($a));

显示为:

Array ( [A] => 2 [Cat] => 1 [Dog] => 2 )

 

Array_unique(array)移除数组中的重复的值,并返回结果数组

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除

$a=array("a"=>"red","b"=>"green","c"=>"red");

print_r(array_unique($a));

显示为:Array ( [a] => red [b] => green )

 

 

使用回调函数处理数组的函数

Array_filter(array,callbackfunction);用回调函数过滤数组中的值、返回原数组

Callbackfunction 必需 规定要使用的回调函数

$arr = array(1,3,4,false,-2,-1,-6,null,-8);

var_dump(array_filter($arr));

echo "<br>";

function myfun($value){

         if($value>= 0)

                   returntrue;

         else

                   returnfalse;

}

var_dump(array_filter($arr,"myfun"));

 

var_dump(array_filter($arr,function($value){

         return!($value%2==0);

}));

显示为:

array(7){ [0]=> int(1) [1]=> int(3) [2]=> int(4) [4]=> int(-2) [5]=>int(-1) [6]=> int(-6) [8]=> int(-8) } 
array(5) { [0]=> int(1) [1]=> int(3) [2]=> int(4) [3]=> bool(false)[7]=> NULL }

 

array_walk(array,myfunction, userdata)对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数

array必需。规定数组。

myfunction必需。用户自定义函数的名称。

Userdata可选。规定用户自定义函数的参数

事例一:

$arr = array(1,2,3,4,5);

function myfun(&$value){

         $value=$value*$value;

}

print_r($arr);

echo "<br>";

array_walk($arr,"myfun");

print_r($arr);

显示为:

Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) 
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )

事例二:

$_arr = array(22,44,66,76,43,24);

array_walk($_arr, function($value,$key){

         var_dump($value, $key);

         echo"<br>";

});

 

显示:int(22) int(0)

int(44) int(1)

int(66) int(2)

int(76) int(3)

int(43) int(4)

int(24) int(5)

 

事例三:

$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);

function myfun($key,$value){

         echo"{$key}===={$value}<br>";

}

array_walk($arr,"myfun");

显示为:

1====one
2====two
3====three
4====four
5====five

 

事例四:

$arr =array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);

array_walk($arr, function($v,$k,$str){

         echo"{$k} {$str} {$v}<br>";

}, "++++");

 

print_r($arr);

echo "<br>";

显示为:

1++++one
2++++two
3++++three
4++++four
5++++five

 

Array_map(callback,$array1,$array2)将回调函数作用到给定数组的单元上、返回一个数组。

callback 回调函数

array 为数组

$arr=array(1,2,3,4);

$brr=array("one","two");

function myfun($v,$bv){

         echo" $v --- $bv <br>";

         return1;

}

$rarr = array_map("myfun",$arr,$brr);

print_r($rarr);

显示为:

1--- one 
2 --- two
 
3 ---
 
4 ---
 
Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 )

 

 

$arr=array(1,2,3);

$brr=array("one","two");

$rarr = array_map(null,$arr,$brr);

echo "<pre>";

print_r($rarr);

echo "</pre>";

显示为:

Array
(
   [0] => Array
        (
            [0] => 1
            [1] => one
        )
    [1] => Array
        (
            [0] => 2
            [1] => two
        )
    [2] => Array
        (
            [0] => 3
            [1] =>
        )
)

 

 

数组的排序函数

1、冒泡法进行排序实例

代码:

<?php

/**

 * PHP中的冒泡排序法使用

 */

  

// 预先声明一个数组

$arr= array(12,45,28,30,88,67);

echo"原数组";

print_r($arr);

echo"<br/>";

//冒泡排序

functionmaopao($arr){

  // 进行第一层遍历

  for($i=0,$k=count($arr);$i<$k;$i++) {

    // 进行第二层遍历将数组中每一个元素都与外层元素比较

    // 这里的i+1意思是外层遍历当前元素往后的

    for($j=$i+1;$j<$k;$j++) {

      // 内外层两个数比较

        if($arr[$i]<$arr[$j]){

        // 先把其中一个数组赋值给临时变量

          $temp= $arr[$j];

        // 交换位置

        $arr[$j] = $arr[$i];

        // 再从临时变量中赋值回来

        $arr[$i] = $temp;

      }

    }

  }

  // 返回排序后的数组

  return$arr;

}

  

// 直接打印排序后的数组

echo'排序后';

print_r(maopao($arr));

  

 

2、二分法进行排序实例

$arr = array(20,18,12,9,45,34,28,22,99);

function qsort($arr){

         if(!is_array($arr)|| empty($arr))

                   returnarray();

 

         //获取数组的长度

         $len= count($arr);

         //如果数组中只有一个元素、直接返回这个数组

         if($len<= 1)

                   return$arr;

 

         $key[0]= $arr[0];

         $left= array();

         $right= array();

         for($i=1;$i<$len;$i++){

                   if($arr[$i]<= $key[0]){

                            $left[]=$arr[$i];

                   }else{

                            $right[]= $arr[$i];

                   }

         }

         $left=qsort($left);

         $right=qsort($right);

         returnarray_merge($left,$key,$right);

}

print_r($arr);

echo "<br>";

print_r(qsort($arr));

显示:

Array( [0] => 20 [1] => 18 [2] => 12 [3] => 9 [4] => 45 [5] => 34[6] => 28 [7] => 22 [8] => 99 ) 
Array ( [0] => 9 [1] => 12 [2] => 18 [3] => 20 [4] => 22 [5]=> 28 [6] => 34 [7] => 45 [8] => 99 )

 

3、数组排序系统函数

Sort()  对数组进行升序排序、排列后数组被赋予新的键名、成功返加true、失败false

Rsort() 对数组进行降序排序、排列后数组被赋予新的键名、成功返加true、失败false

$arr = array(20,18,12,9,45,);

sort($arr);

print_r($arr);

显示为:

Array( [0] => 9 [1] => 12 [2] => 18 [3] => 20 [4] => 45 )

 

Ksort() 对数组按照键名排序、成功,返回 TRUE,否则返回 FALSE

Krsort()对数组按照键名逆向排序、成功,返回 TRUE,否则返回 FALSE

 

Asort() 对数组进行排序并保持索引关系、、成功,返回 TRUE、失败 FALSE

Arsort() 对数组进行逆向排序并保持索引关系、、成功,返回 TRUE、失败 FALSE

 

Natsort() 自然顺序算法对给定数组中的元素排序、保留原始的键名、成功,返回 TRUE、失败 FALSE

Natcasesort()自然顺序算法对给定数组中的元素排序、不区分大小写、保留原始的键名、成功,返回 TRUE、失败 FALSE

 

Usort() 使用用户自定义的比较函数对数组中的值进行排序、成功,返回 TRUE、失败 FALSE

Uasort()使用用户自定义的比较函数对数组中的值进行排序并保持索引关系、成功,返回 TRUE、失败 FALSE

Uksort()使用用户自定义的比较函数对数组中的键进行排序、成功,返回 TRUE、失败 FALSE

$data = array("FILE32.TXT","file.txt","file11.txt");

 

usort($arr, function($a,$b){

         $alen= strlen($a);

         $blen= strlen($b);

 

         if($alen> $blen){

                   return1;

         }elseif($alen< $blen){

                   return-1;

         }else{

                   return0; 

         }

 

});

print_r($arr);

 

 

Array_multisort()对多个数组或多维数组进行排序、成功,返回 TRUE、失败 FALSE

$data = array(

                            array("id"=>1,"name"=>"aa", "age"=>10),

                            array("id"=>2,"name"=>"ww", "age"=>30),

                            array("id"=>3,"name"=>"cc", "age"=>30),

                            array("id"=>4,"name"=>"dd", "age"=>40),

         );

 

$ages = array();

$names = array();

foreach($data as $value){

         $ages[]= $value["age"];

         $names[]= $value["name"];

}

 

array_multisort($ages,SORT_DESC,$name,SORT_DESC,$data);

echo "<pre>";

print_r($data);

echo "</pre>";

显示为:

Array

(

    [0]=> Array

       (

           [id] => 1

           [name] => aa

           [age] => 10

       )

    [1]=> Array

       (

           [id] => 2

           [name] => ww

           [age] => 30

       )

    [2]=> Array

       (

           [id] => 3

           [name] => cc

           [age] => 30

       )

    [3]=> Array

       (

           [id] => 4

           [name] => dd

           [age] => 40

       )

)

 

拆分、合并、分解与结合数组

Array_slice(array,start,length,preserve)在数组中根据条件取出一段值,并返回数组

Array 必需、数组

Start 必需、开始、0第一个元素

Length 可选、取数组的长度

Preserve 可选、true保留键名、false重置键名

$data =array("a","b","c","d","e");

$arr = array_slice($data,-3,2,true);

print_r($arr);

显示为:Array ( [2] => c [3]=> d )

 

array_splice(array,start,length,array)从数组中移除元素,并用新元素取代它,该函数也将返回包含被移除元素的数组

Array 必需、数组

Start 必需、开始、0第一个元素

Length 可选、取数组的长度

Array 插入数组

$data =array("a","b","c","d","e");

$arr =array_splice($data,-3,2,array("hhhh","wwww"));

print_r($arr); //该函数也将返回包含被移除元素的数组

echo "<br>";

print_r($data);

显示为:

Array( [0] => c [1] => d ) 
Array ( [0] => a [1] => b [2] => hhhh [3] => wwww [4] => e )

 

Array_combine (keys,values);通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值、键名数组和键值数组的元素个数必须相同、不同返回false

Keys必需。键名数组

Values必需。键值数组。

$key =array("a","b","c","d","e");

$value = array(11,22,33,44,55);

$all = array_combine($key,$value);

print_r($all);

显示为:

Array( [a] => 11 [b] => 22 [c] => 33 [d] => 44 [e] => 55 )

 

Array_merge(array1,array2,array3...)把一个或多个数组合并为一个数组如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素果您仅向函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引

$a =array("a","one"=>"b","c");

$b = array(10,"one"=>11,12);

$c =  array_merge($a , $b);

print_r($c);

显示为: //下标相同的会覆盖、是前面的覆盖后面的

Array( [0] => a [one] => 11 [1] => c [2] => 10 [3] => 12 )

 

$a =array("a",5=>"b","c"); //只输入一个数组

$c = array_merge($a);

print_r($c);

显示为:Array ( [0] => a [1]=> b [2] => c )

 

Array_intersect()计算数组的交集、返回数组的键名保留不变

Array_diff()计算数组差集、返回的数组中,键名保持不变

 

 

桟和队列

桟:先进后出(子弹夹)

入栈:array_push,在桟尾放入元素!

出栈:array_pop在桟尾删除元素

 

队列,先进先出

入队列:array_push()在数组的尾端将数据压入数组

出队列:array_shift();在数组的顶端,将数据取出

 

array_unshift()可以将数据由数组的顶端压入数组!

事例:

$a=array("a"=>"red","b"=>"green");

array_push($a,"blue","yellow");

print_r($a);

array_pop($a);

echo "<br>";

print_r($a);)

显示为:

Array( [a] => red [b] => green [0] => blue [1] => yellow ) 
Array ( [a] => red [b] => green [0] => blue )

事例:

$a=array("a"=>"red","b"=>"green","c"=>"blue");

echoarray_shift($a);

echo"<br>";

print_r ($a);

显示为

red
Array ( [b] => green [c] => blue )

 

事例:

$a=array("a"=>"red","b"=>"green");

array_unshift($a,"blue");

print_r($a);

显示为

Array ( [0] =>blue [a] => red [b] => green )

 

其他有用的数组处理函数

Array_rand (array,number)函数从数组中随机选出一个或多个元素,并返回键名的数组

Number可选。规定返回多少随机键名

$a =array("red","green","linux");

print_r(array_rand($a,1));

显示为:Array ( [0] => 0 [1]=> 2 )

 

Shuffle(array)把数组中的元素按随机顺序重新排序、返回bool型。该函数为数组中的元素分配新的键名。已有键名将被删除

$a =array("r"=>"red","g"=>"green","l"=>"linux");

shuffle($a);

print_r($a);

显示为:Array ( [0] => red [1]=> linux [2] => green )

 

Array_sum(array)计算数组中所有值的和

$a=array("a"=>5,"b"=>13);

echo array_sum($a);

显示为:18

 

Range (low,high,step)创建一个包含指定范围的元素的数组

Low必需。规定数组的最低值。

High必需。规定数组的最高值。

Step可选。规定元素之间的步进制。默认是 1

$number= range(0,50,10);

print_r($number);

显示为:Array ( [0] => 0 [1] => 10 [2] => 20 [3]=> 30 [4] => 40 [5] => 50 )

 

Array_fill (index,number,value);用给定的值填充数组,返回的数组有 number个元素,值为 value

Index必需。被返回数组的第一个索引。

Number必需。规定要插入的元素数。

Value必需。规定供填充数组所使用的值。

$number = array_fill(3,4,"blue");

print_r ($number);

显示为:Array ( [3] => blue [4]=> blue [5] => blue [6] => blue )

 


本文转自 sswqzx 51CTO博客,原文链接:http://blog.51cto.com/sswqzx/1963557


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP 判断数组是否为空的5大方法
PHP 判断数组是否为空的5大方法 http://www.php100.com/html/it/biancheng/2015/0422/8925.html 来源:码农网   时间:2015-04-22 13:51:11   阅读数:18914 分享到:6 [导读] 本文介绍了PHP开发中遇到的数组问题,这里介绍了判断PHP数组为空的5种方法,有需要的朋友可以借鉴参考一下。
814 0
PHP面试题:你常用到的mysql命令?
PHP面试题:你常用到的mysql命令?
53 0
PHP连接MySQL 8.0报错的解决办法
PHP连接MySQL 8.0报错的解决办法
145 0
centos下 Apache、php、mysql默认安装路径
apache: 如果采用RPM包安装,安装路径应在 /etc/httpd目录下 apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/apachectl web目录:/var/www/html 如果采用源代码安装,一般默认安装在/usr/local/apache2目录下 php: 如果采用RPM包安装,安装路
2972 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载