(独孤九剑)--数组与数据结构
【一】数组
(1)数组属于复合数据类型,可以存入多个不同类型的数据
(2)数组定义:
①$array = array();//5.4版本前的定义方式
②$array = [];
(3)数组函数的使用
(4)分类:数字型索引数组、关联型索引数组
【二】数组的定义
array()和array[]用来定义数组
(1)数字型索引数组
<?php $array = ['one','two',1,"我稍后"]; echo "<pre>"; var_dump($array); echo "</pre>"; ?>
代码解析:<pre></pre>可以原样输出,格式化展示
输出结果 [0]=>string(3) "one"里的 =>为键值对应符
(2)关联型索引数组
$array = array("one"=>"1","two"=>"2","three"=>"3");
数组索引下标不一定非得从0开始;也依次递增,可跳跃,例如
<?php $array = array(2 => 'one',6 => "第6" ); echo "<pre>"; var_dump($array); echo "</pre>"; ?>
输出结果:
array(2) { [2]=> //从2开始 string(3) "one" [6]=> //2完了可以是6 string(4) "第6" }
【三】索引数组操作
(1)向索引数组增加元素
数组变量名[],[]里可以添加索引下标
$array = array(2 => 'one',6 => "第6" ); $array[] = "Tony";
(2)修改索引数组元素
数组变量名[],[]里可以添加对应索引下标即可进行覆盖修改
【四】数组的计算
(1)计算数组长度count()函数
【五】遍历索引数组
for循环遍历索引数组
<?php $array = [1,2,3,4,5,6]; $length = count($array); for ($i=0; $i < $length; $i++) { echo "索引为".$i."的数是".$array[$i]."<br>"; } ?>
【六】遍历关联数组
foreach遍历关联数组
<?php $array = array('name' => 'Tony','age' => 23 ,'class' => 'four'); foreach ($array as $key => $value) { echo '键是'.$key.',值是'.$value.'<br>'; } ?>
【七】list遍历数组
list() 函数用于在一次操作中给一组变量赋值,并且无限参数(参数超过索引数组里元素的数量会报错)
注释:list()只用于数字索引的数组,且假定数字索引从 0 开始。
说明:list() 用数组中的元素为一组变量赋值。
注意,与 array() 类似,list() 实际上是一种语言结构,不是函数。且必须一一对应上
如:
<?php $my_array = array('Dog','Cat','Horse'); list($a, $b, $c) = $my_array; echo 'I have several animals, a '.$a.', a '.$b.' and a '.$c; ?>
结果如下,可正常输出:I have several animals,a Dog,a Cat,a Hores.
【八】each遍历数组
返回数组中当前的键/值对并将数组指针向前移动一步
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。
这个时候,再加上while,就可以实现foreach函数了
$sweet = array( 'a' => 'apple' , 'b' => 'banana' , 0 => "one", 1 => "two" ); while(list($x,$y)=each($sweet)){ echo "键名:$x => 键值:$y"; echo"<br />"; }
结果:
键名:a => 键值:apple
键名:b => 键值:banana
键名:0 => 键值:one
键名:1 => 键值:two
【九】常用操作数组函数
(1)常用操作函数
移动数组指针和压入弹出(插入删除)数组元素
①头部删除:array_shift删除数组第一个元素
<?php $array = [1,2,3]; array_shift($array); print_r($array); ?>
②尾部删除:array_pop删除数组尾部的元素
③头部插入:array_unshift向数组头部添加元素
④尾部插入:array_push向数组尾部插入元素
⑤读取当前指针位置的值:current---注意:默认指针位置为首位,所以这里会输出one
<?php $array = ['one','two','three']; echo current($array); ?>
⑥读取当前指针的键:key---注意:默认指针为首位,所以键为0
<?php $array = ['one','two','three']; echo key($array);//输出0 ?>
⑦指针上移prev,指针下移next
<?php $array = ['one','two','three']; echo key($array);//默认为0 next($array); echo key($array);//指针下移1 prev($array); echo key($array);//指针上移1 ?>
⑧指针到开始处reset,指针到结束处end
(2)数组常用函数
①数组结合array_combine
将两个数组结合,一个数组的值用来做键,另一个数组的元素用来做值。例如
<?php $array1 = ['one','two','three']; $array2 = [1,2,3]; $array = array_combine($array1, $array2); print_r($array);//输出Array ( [one] => 1 [two] => 2 [three] => 3 ) ?>
②范围性数组range
range(low,high,step可选)
<?php $array = range(1,10,2);//范围1-10,每隔两个数输出一个 print_r($array);//输出1,3,5,7,9 ?>
③由变量名和值组成的数组,compact
<?php $one = 1; $two = 2; $three = 3; $array = compact("one","two","three"); print_r($array); ?>
④用给定的值填充数组
array_fill(索引,个数,内容)
⑤用给定的键和值填充数组
array_fill_keys(数组,值)
⑥分割数组为指定个数的新数组
array_chunk(数组,分割数)
⑦合并关联数组
array_merge(关联数组1,关联数组2)
<?php $array1 = array('one' => 1, 'two' => 2); $array2 = array('three' => 3, 'two' => 2); $array = array_merge($array1,$array2); print_r($array) ?>
⑧数组取值
array_slice(数组,开始取值位置,取出长度,保留)
⑨比较数组
array_diff() 比较数组,返回差集(只比较键值)。
array_diff_assoc() 比较数组,返回差集(比较键名和键值)。
array_diff_key() 比较数组,返回差集(只比较键名)。
array_diff_uassoc() 比较数组,返回差集(比较键名和键值,使用用户自定义的键名比较函数)
array_diff_ukey() 比较数组,返回差集(只比较键名,使用用户自定义的键名比较函数)。
⑩搜索数组中指定值,有则返回键
array_search(键值,数组)
⑪移除取代数组元素array_splice()
⑫数组元素和array_sum()
⑬检查数组是否存在元素in_array()
⑭检查数组是否存在元素键名array_key_exists()
⑮ 随机打乱数组shuffle()
⑯ 数组元素个数count或者sizeof
⑰ 反转数组键值array_flip
⑱ 返回数组所有键,并构成新数组array_keys()
⑲ 返回数组所有值,并构成新数组array_values()
⑳反转整个数组array_reverse()
.