数组(一)

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

// 数组学习

/*
有5个学生,学生1,2,3,4,5
每个学生,又有这么几个信息需要记录
姓名,身高,籍贯,年级

每个学生,都有这3个信息,共有15条信息.
*/

$stu1_name = '张三';
$stu1_height = 176;
$stu1_area = '衡水';
$stu1_grade = '高三';

$stu2_name = '李四';
$stu2_height = 176;
$stu2_area = '衡水';
$stu2_grade = '高三';

$stu3_name = '王五';
$stu3_height = 176;
$stu3_area = '衡水';
$stu3_grade = '高三';

$stu4_name = '赵六';
$stu4_height = 176;
$stu4_area = '衡水';
$stu4_grade = '高三';

$stu5_name = '郑七';
$stu5_height = 176;
$stu5_area = '衡水';
$stu5_grade = '高三';

 

/*
在目前的知识范围内,我们可以这样
把几个字段拼写成一个字符串,用约定好的符号拼接起来,
比如,下面的字符串,用"|"拼接字段

这样,可以起到简化变量的目的,
但是,取出家乡的时候,稍微麻烦,
因为要取,第2个竖线和第3个竖线之间的部分.
要用strpos慢慢的取.

有点麻烦


这时----我们就会想:
如果若干个数据,有关联,而且不想把他们定义成一个个的变量,
能否用一个变量,就容纳下这N多数据呢?
*/
$stu1 = '张三|176|衡水|高三';


/****
你去公共浴室洗澡,衣服放在哪儿呢?

放在铁柜里.

分析铁柜的特点:
1:规格都一样,大小,颜色都一样.
如何区分呢?
答:每个柜子都有一个"独特的编号"

编号能不能重复?
答:不能重复,唯一.

因为,编号是区分每个柜子的依据.


2:柜子是空的,本质上,柜子是一个容器,用来放东西.
在浴室里,柜子用来放衣服.
在编程中,柜子放置的是--数据


至此,我们分析出数组最重要的2个概念
1: 柜子的编号----> 键/key/index/索引/下标
(一般而言,编号是字符时,叫"键/key",编号是数字时,叫"索引/index")

2: 柜子储存的内容----> 值/value
****/

 

/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/

 

// 接上一页
// 声明数组的过程,就是一个"造柜子,并且往柜子里放内容的过程".

// 键/值肯定要体现出来

/*
学生1
name '张三'
height 176
area 衡水
grade 高三
*/
$stu1 = array('name'=>'张三','height'=>176,'area'=>'衡水','grade'=>'高三');

print_r($stu1);

/**
在上面的数组的声明中,体现的是"键与值的对应"
数组是什么---就是键值对的集合
**/


/*
数组的声明语法详细探讨
数组的循环(重难点)
数组的函数(重点)
*/

 

《下一个》

// 详细探讨数组的创建方式


// 最本质是键值对,能把键与值的对应关系体现出来,才是最重要的.


///====初始化创建方式=====//
$stu1 = null;

$stu1['name'] = '张三';
$stu1['height'] = 176;
$stu1['area'] = '衡水';
$stu1['grade'] = '高三';

print_r($stu1);


//===array结构来创建=====//
$stu2 = array('name'=>'李四','height'=>176,'area'=>'衡水','grade'=>'高三');
print_r($stu2);


/*
这2种方法都可以创建数组,
虽然形式不同,但是他们本质上有相通之处
--即,都是声明"键与值的对应"
*/


// 初始化方式,便于运行中,临时增加一个单元
$stu1['warn'] = '晚不归宿';

print_r($stu1);

 

 

《下一个》

// 数组创建,之懒人方式
$flower = array('梅','兰','竹','菊');
print_r($flower);

/**
打印结果如下:
Array
(
[0] => 梅
[1] => 兰
[2] => 竹
[3] => 菊
)


分析: 声明数组时,不写键,行不行?
答:行!

这种情况下, 键会从0开始,逐一递增,来自动分配.
**/

 

$stars[] = '刘德华';
$stars[] = '张学友';
$stars[] = '郭富城';
$stars[] = '黎明'; // 不断的开辟一个新单元


print_r($stars);


《下一个》

 

 

// 马虎者的创建方式

$yan = array('name'=>'燕十八','age'=>'28',174,'安徽');
print_r($yan);

/**
打印结果如下:
Array
(
[name] => 燕十八
[age] => 28
[0] => 174
[1] => 安徽
)


分析出:
如果指定的键,则以指定为准,
如果没指定,则从0开始,逐一递增.(不够准确的)
**/

 

$class[] = '张三';
$class[] = '李四';
$class[5] = '王五';
$class[] = '赵六';
$class[] = '郑七';
print_r($class);


/***
如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值 + 1。// 上例从5+1开始

如果当前还没有整数索引,则键名将为 0。// 在$yan中得到体现

如果指定的键名已经有值了,该值将被覆盖。(见下例)

***/


$butty[] = '林志玲'; // key = 0
$butty[] = '仓井空'; // key = 1
$butty[1] = '武藤兰'; // 指明key = 1单元,值为武藤兰,这其实是再次把1号柜的内容修改为"武藤兰"
$butty[3] = '小泽xxx';

print_r($butty);

// 上面这3个例子,讨论清楚键的增长关系.

 

 

$arr = array('中','华','民','国'); // 0 1 2 3
print_r($arr);

unset($arr[3]);
print_r($arr);

$arr[] = '族';
print_r($arr); // 键是:0124,删掉了一个单元,键的增长不受该影响,继续往上增长.

 


《下一个》

 

 

// 数组已经学会创建了,那么
// 如何读数组中一个单元值?
// 数组的单元能容纳什么类型的值?
// 如何给数组增加一个单元?
// 如何改数组中一个单元值?
// 如何删掉一个数组单元?


// 一切,都得从"键值"上来考虑


// 读单元的值---一个柜子是一个单元,一个单元的"凭证"是什么?
// 自然是通过"键"

$arr = array('梅','兰','age'=>28,'height'=>176);

echo $arr[0];
echo $arr['age'];

 

// 数组单元的值允许是什么类型?
// PHP中有8种变量类型
// 答: 可以容纳PHP中的所有合法类型,即8种都可以,意味着,单元的值,还可以是数组
// 如下这种情况,称为"二维数组"

$class['stu1'] = array('name'=>'张三','age'=>'28');
print_r($class);

// 如何把age=>28中的,28打印出来
/*
$class['stu1'] --->指向array('name'=>'张三','age'=>'28')
在此基础上,我们再用一个键,继续指
*/
echo '<br />';
echo $class['stu1']['age'];


// 如果数组的单元A,值为数组B,数组B的某个单元继续是数组
// 即,二维数组,.....三维,四维...
// 一般,超过二维,通叫"多维数组"

 


// 给数组增加单元
$arr = array('中','华');
$arr[] = '民';
$arr[] = '国';

echo '<hr />';
print_r($arr);


// 修改数组的单元值
// 指定已有的数组单元,并赋值就可以了.
$arr[3] = '族';
echo '<hr />';
print_r($arr);


// 删一个单元
unset($arr[3]);
echo '<hr />';
print_r($arr);


《下一个》

 

 

/*

PHP语言非常灵活,
在C语言中,js中,java中,数组的索引只能是数字
而在PHP中,key/index可以是字符串,也可以是数字.

如果索引是纯数字,这种数组称为"索引数组",
否则,称为关联数组.
*/


《下一个》

 

 

$arr = array('春','夏','秋','冬');

/*
要求: 打印出'




即:把4个单元值,挨个儿打出来
*/


// for循环来循环数组单元
// 默认情况下,数组的键从0开始,逐一递增,最大的键是其数组的(单元个数-1)
// 有规律可循环.

// 如何计算数组的单元个数呢?
// 答: count函数

echo count($arr),'<br />';

for($i=0,$i<count($arr);$len;$i++) {
echo $arr[$i],'<br />';
}


// 优化这道题,细节能体现一个人的水平

for($i=0,$len = count($arr);$i<$len;$i++) {
echo $arr[$i],'<br />';
}

// 同学们课下里可以把这两个for循环各循环10W次,看看差距.


《下一个》

 

 

$arr = array(3=>'梅',2=>'兰',5=>'竹',9=>'菊');
// 这一次,for循环没有规律可循,再用for循环不灵了.....
// 引入foreach


//foreach是怎么工作的呢?

foreach($arr as $k=>$v) { // 这是说:循环数组的每个单元,把单元的键赋给$k,值赋给$v
echo $k,'~',$v,'<br />';
}

echo $k,'~',$v; // 停留在最后一次赋值的情况


// 有人说,我不想循环时,要数组的键,我只是想循环着打印每个单元值
echo '<hr />';

foreach($arr as $v) { // 这是说:循环数组的每个单元,把单元的值,赋给$v
echo $v,'<br />';
}


// 有人说,我不想循环时,要数组的值,我只想循环打印数组的键
foreach($arr as $k) {
echo $k,'<br />'; // 打印的还是值,$k只是被赋值而已
}


// 有人说这样
/*
foreach($arr as $k=>) { // 语法错误
echo $k,'<br />';
}
*/


《下一个》

 

 

$arr = array('1'=>'334','3'=>'898','2'=>'779','3'=>'989898');

print_r($arr); // '3'被赋盖了


foreach($arr as $k=>$v){
echo $k,'~',$v,'<br>';
}
echo '<hr>';
print_r($arr);

posted on 2012-10-13 10:53  besile  阅读(245)  评论(0)    收藏  举报