数组定义方式
变量类型的一种,是一个复合型的数据
$arrayName = array('name'/*键*/ => 'tzm'/*值*/, 'age'=> 23);//字符串需要用引号包裹,数字不需要
//可以有多个键值对:name=>tzm age=>23 xxx=>xxx ......
//打印数组
print_r($arrayName);
echo '
';
//获取数组中的某一个单元
echo $arrayName['age'];
数组类型
数组的分类:
索引数组; 关联数组; 二维数组; 多维数组
$suoyin = array(0 => 'a中文会怎样', 1 => 'b没问题', 2 => 'c');//索引/枚举/数字 数组
print_r($suoyin);
echo('
');
$guanlian = array('name1' => 'tzm', 'name2' => 'wjn', 'age' => '21');//关联数组
print_r($guanlian);
echo('
');
$erwei = array('name' => 'tzm', 'age' => '21', 'hobby' => array('cs', 'english', 'sport', 'guitar', 'photography'));//二维数组
print_r($erwei);
echo('
');
$duowei = array('name' => 'tzm', 'age' => '21', 'hobby' => array('cs' => array('php', 'python', 'css3', 'html5', 'java'), 'english', 'sport', 'guitar', 'photography'));//多维数组
print_r($duowei);
//查看页面源代码,更直观能感受到他们的区别
数组键规则
//如果没有声明键名,自动声明索引数组
$array1 = array('a', 'b', 'c', 'd');
print_r($array1);
echo '
';
//有的分配了键名,有的没有分配,最后也是自动声明了
$array2 = array('name' => 'tzm', 'a', 'age' => '23', 1);
print_r($array2);
echo '
';
//键分配重复了
//$array3 = array('name' => 'tzm', 'a', 1 => '二十三', 1);
$array3 = array('name' => 'tzm', 'a', 5 => '二十三', 1);
print_r($array3);
echo '
';
/*数组的键只有两种:整型和字符串型
健为浮点型,字符串型的整数,和null
健为浮点数->向下取整
如果字符串恰好理解为一个整数,也转为整数
null按空字符串来理解*/
$array4 = array(2=>'东',2.5=>'南','2.5'=>'西','2'=>'北',null=>'中');
print_r($array4);
操作数组单元
//增删改查
$duowei = array('name' => 'tzm', 'age' => '21', 'hobby' => array('cs' => array('php', 'python', 'css3', 'html5', 'java'), 'english', 'sport', 'guitar', 'photography'));//多维数组
//查
echo $duowei['name'],'
';
echo $duowei['hobby'][1],'
';
echo $duowei['hobby']['cs'][1],'
';
//改
$duowei['age'] = 18;
print_r($duowei);
echo '
';
//删
unset ($duowei['hobby'][2]);//注意,这里我看了一下, 删了以后,其他键值是没有改变的,0还是english,1还是sport,3还是photography
print_r($duowei);
echo '
';
//增
$duowei['gender']='男';
print_r($duowei);
遍历数组
foreach是专门用来循环数组的,速度非常快
foreach 里面的键值的变量名($k,$v) 为任意合法的变量名
array_keys — 返回数组中所有的键名
foreach 没有办法单循环取出健
$a = array('a', 'b', 'c', 'd');//索引数组
/*echo $a[0];
echo $a[1];
echo $a[2];
echo $a[3];*/
/*for ($i=0; $i < count($a); $i++) {
echo($a[$i]);
}*/
foreach ($a as $key => $value) {
echo($a[$key]);
}
echo '
';
foreach ($a as $key => $value) {
echo $value;
}
echo '
';
foreach ($a as $value) {
echo $value;
}
echo '
';
print_r(array_keys($a));
echo '
';
$a2 = array('name' => 'tzm', 'age' => 23, 'gender' => '男');
print_r(array_keys($a2));//返回所有的键名
$money = array('q'=>3, 'w'=>4, 'e'=>5, 'r'=>6);
foreach ($money as $key => $value) {
//$value = $value*2; 不能这么写
$money[$key] = $value*2;
}
print_r($money);
数组游标操作
数组的游标操作并不是经常使用
但是有利于我们理解数组是怎样循环的
数组内部有一个这样的游标,会指向当前数组的单元
current — 返回数组中的当前单元
next — 将数组中的内部指针向前移动一位
prev — 将数组的内部指针倒回一位
end — 将数组的内部指针指向最后一个单元
reset — 将数组的内部指针指向第一个单元(重置内部游标)
each — 返回数组中当前的键/值对并将数组指针向前移动一步
list — 把数组中的值赋给一些变量
each();遍历数组
可以读取当前指针指向的单元的 健/值,且以数组形式返回
list();同时给多个变量赋值
each();加list()获取数组的健和值
$a = array('name' => 'tzm', 'age' => 23, 'gender' => '男');
/*next($a);
prev($a);
end($a);
reset($a);
echo current($a),'
';
print_r(each($a));
echo "
";*/
//each();遍历数组,打印数组所有的内容,键跟值
/*while ($bianliang = each($a)) {
print_r($bianliang);
echo('
');
}
$a2 = array('a', 'b', 'c', 'd');
list($q,$w,$e,$r) = $a2;
echo $q, "
";
echo $w, "
";
echo $e, "
";
echo $r, "
";
*/
while ($bianliang22 = each($a)) {
list($key,$value) = $bianliang22;
echo $key,':',$value, '
';
}
数组常用函数
count()
array_key_exists()
in_array()
array_change_key_case();
array_count_values();
array_fill();
array_filter();
array_values()
array_keys()
array_push()
array_pop()
array_shift()
array_unshift()
Sort(),rsort(),Usort(),asort(),
ksort(),natsort(),natcasesort()
array_merge()
array_merge_recursive()
array_diff()
array_diff_assoc()
array_intersect()
array_intersect_assoc()
array_flip();
array_unique()
array_reverse()
array_sum();
shuffle()
range()
array_rand()
count — 计算数组中的单元数目或对象中的属性个数
1)如果不是数组则返回1
2)如果是null则返回0
array_ key_exists — 检查给定的键名或索引是否存在于数组中
判断数组中的键名是否存在(isset)
in_array — 检查数组中是否存在某个值
$a = array('a', 'b', 'c', 'd');
echo count($a),'
';
echo count('whatever'),'
';
echo count(null),'
';
$a2 = array('东', '西', '南', '北');
var_dump(array_key_exists("0", $a2));//true
$a3 = array('东'=>1, '西'=>2, '南'=>3, '北'=>4);
var_dump(array_key_exists("东", $a3));//true
var_dump(in_array(3, $a3));
if (in_array(5, $a3)) {
echo '存在';
}else{
echo '不存在';
}
案例之小羊繁殖问题
一种羊 生命长度为 5 周年
满 2 周年生一只小羊 满四周年生一只小羊, 5 周年死
初始有 1 只 0 岁的羊,20 年后有多少羊。
$a = array(1,0,0,0,0);
for ($i=1; $i <= 20; $i++) {
array_pop($a);
array_unshift($a,0);
$a[0] = $a[2]+$a[4];
}
print_r($a);
echo array_sum($a);
array_push — 将一个或多个单元压入数组的末尾
array_pop — 将数组最后一个单元弹出
array_shift — 将数组开头的单元移出数组
array_unshift — 在数组开头插入一个或多个单元
$a = array('a', 'b');
print_r($a);
echo '
';
array_push($a, 'c');
print_r($a);
echo '
';
array_pop($a);
print_r($a);
echo '
';
array_shift($a);
print_r($a);
echo '
';
array_unshift($a, 'd');
print_r($a);