博客列表 >数组分类、定义及遍历

数组分类、定义及遍历

不羁PHP学习笔记
不羁PHP学习笔记原创
2018年11月29日 00:34:421304浏览
<?php
$codes = '<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>数组遍历</title>
    <style type="text/css">
        h1{margin: 0px;color: red;background: #ccc;}
        h3{margin: 0px;color: red;background: #ccc;}
        h5{margin: 0px;color: red;background: #ccc;}
        body{font-size: 24px;color: #ccc;}
    </style>
</head>
<body>
    <h1>数组遍历</h1>
</body>
</html>';
echo ($codes);
/**
 * 课程内容
 * 1.数组分类
 * 2.数组定义
 * 3.数组遍历
 */

/**
 * 一、数组分类
 * 1.数组是由一组有序的值或键值对组成的数据结构
 * 2.数组根据键名类型分为:索引数组 与 关联数组 二大类
 * 3.索引数组:键名是元素的位置索引,默认从0开始,采用系统自动处理可以省略键名
 * 4.关联数组:键名是自定义的字符串,类似于对象中的属性列表
 */

//索引数组: 采用字面量直接定义
//降龙十八掌,前六招,能接住这前六招,当今武林,恐怕不会超过五人,目前已经够用了
$arts = ['亢龙有悔', '飞龙在天', '见龙在田', '鸿渐于陆', '潜龙勿用', '突如其来'];

//关联数组: 采用字面量直接定义
$swordsman = ['name'=>'郭靖', 'position'=>'金刀驸马', 'skill'=>'降龙十八掌'];
foreach ($swordsman as $key => $value) {
    # code...
    echo $key."=》".$value."<br>";
}
echo "<hr>";
/**
 * 二、数组定义
 * 1. 整体定义: $arr = [...]
 * 2. 逐个定义: $arr[] = ...
 * 3. 数组元素可以是字面量,也可以变量,甚至还可以是数组,从而创建多维数组
 */

//整体定义,参照上面的案例

//逐个定义:以添加的方式的来创建数组
$postion = '金刀驸马';

$swordsman = []; //可选,推荐写上
$swordsman['name'] = '郭靖';     //用追加的方式,用字面量初始化元素
$swordsman['course'] = $postion;   //用变量初始化元素
$swordsman['skill'] = '降龙十八掌';

/**
 * 三、数组遍历
 * 1. for()循环:适合遍历索引数组
 * 2. while()循环
 * 3. foreach()循环: 数组专用,强烈推荐
 * 4. list(),each(),while()配合完成的遍历,因为each()已不再推荐,所以不再学习
 * 4. 内部指针
 */

//1.for
$res1 = '降龙十八掌招式:';
for ($i=0; $i<count($arts); $i++){//count()数组元素个数
     $res1 .= $arts[$i].',';//  .=  连接字符串
     echo $res1,"<br>";
}
echo rtrim($res1, ','), '<hr>';//rtrim()字符串函数:去掉最右边指定字符


//2.while
$res2 = '';
$i = 0;
while ($i < count($arts)) {
    $res2 .= $arts[$i].'<a>-</a>';
    echo $res2,"<br>";
    $i++;
}
echo rtrim($res2, '<a>-</a>'), '<hr>';


//3.foreach()
foreach ($swordsman as $key=>$value)
{
    echo $key,'=>',$value,'<br>';
}

echo "<hr><h3 style = 'color:red;'>测试each</h3><br>";
/**
 * 4.list(),each(),while()遍历
 * list($var1,$var2,...) = [value1, value2,....]:将索引数组中的值,依次赋给list()中的变量
 * each($arr):将数组中的每个元素,拆分键和值二部分,并分别以索引和关联二种方式返回
 */


//测试each()
$arr = [100,'name'=>'peter'];
$temp = each($arr);
print_r($temp);
$temp = each($arr);
print_r($temp);
//
echo "<hr><h5 style = 'color:red;'>list()和each()完成遍历数组,上面遍历过,指针需要复位,使用reset()函数</h5><br>";
reset($swordsman);
while(list($key, $value) = each($swordsman)){
    echo $key,'=>',$value,'<br>';
}
echo "<hr>";

/**
 * 5.内部指针
 * (1)current():当前指针指向元素的值
 * (2)key(): 当前指针指向元素的键名/索引
 * (3)next(): 指针后移
 * (4)prev(): 指针前移
 * (5)end(): 指针移到尾部最后一个元素上
 * (6)reset(): 指针复位,指向第一个元素
 */

//指针复位
reset($arts);

//获取第一个元素的键值
echo key($arts),'---',current($arts),'<br>';

//后移一位,获取第二个元素的键值
next($arts);
echo key($arts),'---',current($arts),'<br>';

//前移一位
prev($arts);
echo key($arts),'---',current($arts),'<br>';

//移到最后,获取最后一个元素的键值
end($arts);
echo key($arts),'---',current($arts),'<br>';

//下面我们用for()循环与数组指针配合来完成关联数数组的遍历

echo '<hr>';
//记得先复位数组指针,从头开始遍历
reset($arts);

for ($i=0; $i<count($arts); $i++) {
    //输出当前元素的键值
    echo key($arts),'---',current($arts),'<br>';

    //指针后移一位
    next($arts);
}

//使用while循环配置指针进行遍历
echo '<hr><h5 style = "color:red";>使用入口判断型,会导致第一招丢失</h5><br>';
reset($arts);

//使用入口判断型,会导致第一招丢失
while (next($arts)) {
    echo key($arts),'---',current($arts),'<br>';
}
echo '<hr><h5 style = "color:red";>使用入口判断型另一种方法</h5><br>';
reset($arts);

//使用入口判断型另一种方法
while (current($arts)) {
    echo key($arts),'<===>',current($arts),'<br>';
    next($arts);
}
//应该使用出口判断结构: do ~ while()
echo '<hr><h5 style = "color:red";>使用出口判断结构: do ~ while()</h5><br>';
reset($arts);

do {
    echo key($arts),'---',current($arts),'<br>';
} while (next($arts));


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
不羁2018-11-29 00:36:061楼
不带高亮的吗