个人PHP学习笔记(四)--数组

目录

  • 基本语法
  • 语句结构
  • 函数
  • 数组
  • 面向对象的程序设计
  • 字符串
  • 正则表达式
  • 常用函数
  • 文件系统
  • 图形图像处理
  • MySQL数据库
  • Cookie&Session
  • 错误和异常

数组


概述

  • PHP的弱类型性质,可以存储的内容是多种类型,不需要担心数据类型的问题。
  • 数组的长度可以动态增长的。
  • 数组的本质就是储存,管理和操作一组变量。数组储存的就是一系列变量值。
姓名性别年龄公司电子邮件
Marshall20Abstergomarshall@exp.com
John22Bobojohn@exp.com
<?php
    $marshall_name='Marshall';
    $marshall_sex='man';
    $marshall_age=20;
    $marshall_com='Abstergo';
    ...
?>                                  
//不使用数组

<?php
    $marshall_info=array('Marshall','man',20,'Abstergo','marshall@exp.com');
    $john_info=array('John','woman',22,'Bobo','john@exp.com');
?>                                  
//使用数组

索引数组

姓名性别年龄公司电子邮件
Marshall20Abstergomarshall@exp.com
01234
  • 默认情况下索引是不需要定义的。
  • 默认数组使用从0开始的数字依次递增来对应每个元素。

关联数组

姓名性别年龄公司电子邮件
Marshall20Abstergomarshall@exp.com
namesexagecomemail
  • 索引不再是数字,可以使用有意义的字符串作为元素的索引

初始化数组

直接赋值初始化索引数组

$name [exp] = val              //变量数组名+索引(下标)+赋值符号+元素内容

<?php
    $marshall_info[0]='Marshall';
    $marshall_info[1]='man';
    $marshall_info[2]='20';
    $marshall_info[3]='Abstergo';
    $marshall_info[4]='marshall@exp.com';
?>
  • 如果在直接赋值声明数组时不定义索引值,系统会默认从下标0开始依次递增
  • 如果在声明的时候索引被指定了一个值,那么后面的元素下标会递增。
  • 如果在声明的时候索引被定义了一个值,在递增过程中遇到了较小的下标,那么递增会跳过这个下表,在后面继续递增。
  • 如果在声明的时候索引被定义了一个值,在递增过程中遇到了较大的下标,那么程序会以这个下标开始递增。

直接赋值初始化关联数组

$name [exp] = val              //变量数组名+索引(下标)+赋值符号+元素内容

<?php
    $marshall_info[name]='Marshall';
    $marshall_info[sex]='man';
    $marshall_info[age]='20';
    $marshall_info[com]='Abstergo';
    $marshall_info[email]='marshall@exp.com';
?>
  • 如果在声明时不给下标指定一个值,那么系统就会从下标0开始,并且递增。

使用array()初始化数组

$name=array($key=>$value,$key2=>$value2,$key3=>$value3,...)		//$key索引

$name=array($value,$value2,$value3,...)                         //默认为索引数组,下标从0开始

<?php
    $marshall_info=array('name'=>'Marshall',
                         'sex'=>'man',
                         'age'=>20,
                         'com'=>'Abstergo',
                         'email'=>'marshall@exp.com');

                   print_r($marshall_info);
?>

数组的类型

一维数组

$arr_name=array(value1,value2,...)

$arr_name[$key]

<?php
    $marshall_info=array('name'=>'Marshall',
                         'sex'=>'man',
                         'age'=>20,
                         'com'=>'Abstergo',
                         'email'=>'marshall@exp.com');

    print_r($marshall_info);
    echo '姓名:'.$marshall_info['name'].'<br/>';
    echo '性别:'.$marshall_info['sex'].'<br/>';
    echo '年龄:'.$marshall_info['age'].'<br/>';
    echo '公司:'.$marshall_info['com'].'<br/>';
    echo '邮箱:'.$marshall_info['email'];

    $k='name';
    echo '姓名:'.$marshall_info[$k].'<br/>';
    $k='sex';
    echo '性别:'.$marshall_info[$k].'<br/>';
    $k='age';
    echo '年龄:'.$marshall_info[$k].'<br/>';     
    $k='com';
    echo '公司:'.$marshall_info[$k].'<br/>';
    $k='email';
    echo '邮箱:'.$marshall_info[$k];
?>

多维数组

<?php
    $arr=array(array(1,2,3),array(4,5,6),array(7,8,9));
    print_r($arr);
    echo $arr[2][2];
?>
  • 多维数组也可以是索引数组
$arr=array('ONE'=>array('one'=>1,'two'=>2,'three'=>3),
           'TWO'=>array('one'=>4,'two'=>5,'three'=>6),
           'THREE'=>array('one'=>7,'two'=>8,'three'=>9));
  • 三维数组不再赘述。

数组的遍历

for,for-each循环遍历数组

1.for循环

<?php
    $arr=array(1,2,3,4,5,6);
    echo '$arr数组中元素的值如下:';
    for($i=0;$i<6;$i++)
    {
        echo '<br/>'.$arr[$i];
    }
?>

count ($var,$mode)       //$mode=0计算数组中的第一维的元素个数,$mode=1递归计算数组中的多维的所有元素个数

<?php
    $arr=array(array(1,2,3),array(4,5,6),array(7,8,9));
    echo '$arr数组中所有元素的值如下:';
    for($x=0;$x<count($arr);$x++)
    {
        for($y=0;$y<count($arr[$x]);$y++)
        {
            if($arr[$x][$y])
            {
                echo '<br/>'.$arr[$x][$y];
            }
            else
            {
                echo '<br/>'.$arr[$x];
            }
        }
    }
?>

2.for-each循环

foreach (array_name as $value) 

foreach (array_name as $key=>$value)

<?php
    $arr=array(1,2,3,4,5,6,7,8,9);
    foreach($arr as $k=>$v)
    {
        echo "数组中的第".$k."元素是:".$v.'<br/>';          //可以输出键值对
    }
?>

<?php
    $arr=array(1,2,3,4,5,6,7,8,9);
    foreach($arr as &$v)
    {
        $v*=2;                                            //引用的方式
    }
    foreach($arr as $k=>$v)
    {
        echo "数组中的第".$k."元素是:".$v.'<br/>';          
    }
?>

each( ),list( )和while循环便利数组

each函数
  • 接受一个数组变量名参数,返回数组中当前指针位置的键值对并向后移动数组指针
  • 键值对被返回为4个元素的数组,键名为0,1,key和value。
  • 元素0和key包含有数组元素的键名,1和value包含有数据。
  • 如果内部指针超越了数组的末端,则返回FALSE.
<?php
    $arr=array('name'=>'Marshall','age'=>20);
    print_r(each($arr));
    echo '<br/>';
    print_r(each($arr));
    echo '<br/>';
    var_dump(each($arr));           //验证指针
?>
list函数
  • 把数组中的值赋给一些变量。
  • 使用一次操作,给多个变量赋值。
  • list内参数和数组内元素是一一对应的。
  • list内参数个数小于数组内元素个数,则程序会把数组内对应个数的元素赋值给函数参数。
  • list内参数个数大于数组内元素个数,则程序会发出警告。
<?php
    $arr=array('A','B','C','D');
    list($a,$b,$c,$d)=$arr;
    echo "\$a=$a,\$b=$b,\$c=$c,\$d=$d";

    list($e,$f)=$arr;
    echo "\$e=$e,\$f=$f";
?>

<?php
    $arr=array('one'=>'A','two'=>'B','three'=>'C');
    list($k,$v)=each($arr);          //list只能接受索引数组,对list来说:参数就是索引值和元素内容
    echo "$k=>$v<br/>";              //Array([0]=>one  [1]=>A)

    list($k,$v)=each($arr);
    echo "$k=>$v<br/>";

    list($k,$v)=each($arr);
    echo "$k=>$v<br/>";
?>
while循环和each( )函数联合使用遍历数组
<?php
    $arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
    while($n=each($arr))
    {
        echo $n['key'].'=>'.$n['value'].'<br/>';     //字符串
        echo $n[0].'=>'.$n[1].'<br/>';               //索引数组同样适用
    }
?>
while循环和each( ),list( )联合遍历数组
<?php
    $arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
    while(list($x,$y)=each($arr))
    {
        echo "$x=>$y<br/>";
    }
?>

数组内部指针控制函数

  • 数组的内部指针是数组的组织机构,它可以指向数组中任意一个元素。
  • 默认指向数组的第一个元素。
  • 通过控制指针的移动,可以访问到数组中的任意一个元素。
函数名说明
current()返回当前元素的内容。并不移动指针。超出元素列表末端则返回FALSE。
key()返回当前元素的索引值
next()返回数组内部指针指向的下一个元素的内容,没有时则返回FALSE。元素的值为空或者为0也会返回FALSE。
prev()返回数组内部指针指向的前一个元素的内容,没有时则返回FALSE。元素的值为空或者为0也会返回FALSE。
end()将数组的内部指针移动到最后一个元素并返回其值
reset()将数组的内部指针倒回到第一个元素并返回其值,数组为空则返回FALSE。
<?php
    $arr=array('one'=>'A','two'=>'B','three'=>'C','four'=>'D');
    echo 'current()=>'.current($arr).'<br/>';
    echo 'key()=>'.key($arr).'<br/>';
    echo 'next()=>'.next($arr).'<br/>';
    echo 'prev()=>'.prev($arr).'<br/>';
    echo 'end()=>'.end($arr).'<br/>';
    echo 'reset()=>'.reset($arr);
?>

PHP预定义数组

  • 在全局范围内自动生效。
  • 包含了来自Web服务器,客户端,运行环境和用户输入等数据。
预定义数组名说明
$GLOBALS包含了全局变量的全局组合数组。变量的名称就是数组的键。
$_SERVER包含了诸如头信息,路径及脚本位置等信息的数组。
$_GET通过URL参数传递给当前脚本的变量的数组。
$_POST通过HTTP POST方法传递给当前脚本的变量的数组。
$_REQUEST默认情况下包含了GET,POST,COOKIE的数组。
$_FILES通过HTTP POST方法上传到当前脚本的项目的数组。
$_SESSION当前脚本可用SESSION变量的数组。
$_COOKIE通过HTTP COOKIE方法传递给当前脚本的变量的数组。
$_ENV通过环境方式传递给当前脚本的变量的数组。

相关处理函数

1.array_sum()

<?php
    $arr=array(1,2,3,4,5,6,7,8,9);
    echo '$arr数组中所有值的和是:'.array_sum($arr);

    $arr=array(1,2,3,a,b,c,4);                             //字符串会被当做0处理
    echo '$arr数组中所有值的和是:'.array_sum($arr);
?>

2.in_array()

<?php
    $arr=array(1,2,3,a,b,c,4);
    if(in_array('a',$arr))
    {
        echo '找到了你要找的值。';
    }
    else
    {
        echo '没有找到你要找的值。';
    }
?>

3.array_count_valuse()

<?php
    $arr=array(11,2,31,11,2,6,39,2,2);
    print_r(array_count_values($arr));

    $c=array_count_values($arr);
    echo '<br/>';
    echo '数组$arr中数值2出现了'.$c[2].'次。<br/>';
    echo '数组$arr中数值11出现了'.$c[11].'次。<br/>';
    echo '数组$arr中数值31出现了'.$c[31].'次。<br/>';
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值