php_数组
数组
数据由元素组成,元素由键和值组成
数组分类
关联数组
关联数组,元素的下标与元素的值存在逻辑上的关系,称之为关联数组。指的是,键和值之间存在管理。
$a1 = array('name' => '李寻欢', 'age' => 34);
索引数组
索引数组,元素的值和下标不存在逻辑关系,而下标只表示值索引位置。
$a1 = array('李寻欢',34);
数组遍历
所要的完成遍历数组,需要依次得到每个元素的信息(键的信息和值的信息).核心在于数组的元素指针上
数组的元素指针
每一个数组内的,都有一个内部的指向某个元素的指针。
默认情况下,这个指针指向数组的第一个元素.
每个数组只有一个指针,同时时刻,只能指向一个元素,因此指针的位置,可以是任意一个已存在的元素。同时指针可能指向数组的外部(数组的末端[最后一个的外边]),就是非法位置.
';
}
list()可以使在遍历的循环体内直接使用保存元素下标的变量.直接使用保存元素下标的变量和保存元素值的变量.一个函数,可以通过一个数组,针对多个变量同时初始化
$student = array('李寻欢', '天机老人', '阿飞');
list($a, $b, $c) = $student; // 将数组内的元素, 以此赋值给list结构中的变量 // 类似 es6 中的解构赋值
var_dump($a, $b, $c);
list 针对索引数组生效
$student = array('李寻欢', '天机老人', '阿飞');
while (list($k, $v) = each($student)) {
echo 'Key:', $k;echo ' ';echo 'Value:', $v;echo '[br]';
};
# 数组复制元素指针如果原数组指针合法:数组在复制时,指针位置也会随之复制到目标数组内.
$a1 = array('a', 'b', 'c');
$a2 = $a1;
var_dump(current($a2)); // a
echo '';
$a1 = array('a', 'b', 'c');
next($a1);
$a2 = $a1;
var_dump(current($a2)); // b
如果原数组指针非法: 将重置新数组的指针; 重置为默认指针.
$a1 = array('a', 'b', 'c');
end($a1);
next($a1);
$a2 = $a1;
var_dump(current($a2)); // a
# foreach与数组指针关系foreach对指针的影响有不确定性,因此不要依赖foreach遍历后的指针位置,如果需要操作,需要先重置(reset();).数组遍历的是,原数组的拷贝,而不是直接在数组上进行操作.php内部优化,写时复制(COW--copy on write) .如果不对原数组执行写操作. 是不会发生复制的过程. 在对原数组进行**写操作**时,这个复制的过程才会发生.数组复制时的指针问题foreach遍历的时候,是拷贝,但是发生在对原数组进行操作之后.意味着,在写操作之前,遍历操作的就直接是原数组. 一旦发生了写操作,则会形成一个真实的拷贝,foreach去遍历的数组就与原数组不是同一个. 因此原数组指针就不会继续发生变化. 唯一的例外在最后一次循环体内对数组进行写操作,此时在复制前指针已经非法,则结果会被重置.在实际操作中,建议处理完毕后,可以立即reset(); 上面的问题,只适用于$value ,保存元素值的变量是值传递的情况,如果是引用传递的话.直接操作原数组!$key不能引用传递.# array函数## 常用函数array_fill(起始位置,长度,内容); //使用固定值填充某些数量的元素.count(); //统计数组元素个数. 支持递归统计.range(起始范围,结束范围); //按照范围创建数组元素.array_merge(); //合并多个数组.
// 注意一个下标冲突的情况,如果索引下标冲突,顺序增加.
// 关联数组冲突. 后合并的要覆盖前面的.
array_merge(range('a','z'),range('A','Z'));
array_rand(数组,选择的数量[默认一个]); //随机从数组中取得某些元素. 得到的是随机的下标,而不是元素值. 并且,如果是多个元素,会按照下标的大小进行排序.shuffe(); //打乱元素顺序,参数是引用传递.
// 验证码中的 4位 随机数
// 创建一个大小混合的数组
$chars = array_merge(range('a','z'),range('A','Z'));
// 取得4个元素下标
$rand_keys = array_rand($chars, 4);
// 打乱
shuffle($rand_keys);
// 利用下标获取元素值
foreach ($rand_keys as $v) {
echo $chars[$v];
}
## 键值操作array_value(); //取得所有元素的所有值. array_key(); //取得所有元素的所有键.array_combine(); // 利用两个数组,其中一个为 键 ,另一个为值得到一个新数组.in_array(); //判断数组中是否有某个值 array_key_exists(); //是否有某个元素. array_search(); // 在数组内查找某个元素值,找到返回 下标. 找不到返回false.array_filp(); // 交换元素的键和值.## 合并拆分'+'号
$a1 = array(1, 2, 3, 4);
$a2 = array(6, 7, 8);
var_dump($a1+$a2); // 如果出现下标冲突,则忽略后边的元素
array_merge($arr1, $arr2); // 合并多个数组. array_chunk($arr, len); //按照子数组的长度,进行对原数组拆分.explode(); //将一个字符串,按照某个字符,分割成多个部分.implode(); //可以将数组元素的值, 利用某个字符,连接
$arr = array('aa', 'bb');
echo $arr = implode('-', $arr); // aa-bb
print_r(explode('-', $arr));
compact(); 合并, 利用多个变量,合并成一个数组. 其中变量的名字作为数组的下标. 变量的值,作为值. 注意参数是变量名
$width = 2;
$height = 10;
$arr = compact('width', 'height');
extact(); 拆分,将一个变量,拆分成一个变量。每一个元素为一个变量。 下标为变量名,值为变量值. 字符串的下标.注意,如果当前已经存在变量名,则会发生将已有变量值替换的操作.这个是默认行为.可以修改,通过extact(),第二个参数. 默认为EXTR_OVERWRITE表示重写 //EXTR_SKIP 表示略过.array_diff(数组1,数组2); // 得到数组1中与数组2中不相同的元素. -- 差集 值判断. array_intersect(数组1,数组2);// 得到数组1中与数组2中相同的元素. --交集.array_map($callback, $arr1); // 对数组内的每个元素,进行一次操作.分别调用某个函数进行一次调用.如果函数是自定义的.注意,应该有参数接收元素值,同时应该有返回值
$a1 = array(10, 20, 3);
function x2 ( $item ) {
return $item * 3;
}
$arr = array_map('x2', $a1);
var_dump($arr);
只负责定义,不负责调用. array_map(); 函数内部负责调用.可以同时接收或处理.是统一操作,一次将所有数组相同位置都操作一遍,而不是逐一操作. 因此该函数所接受的参数个数,与所传递的数组的数量应该一致.有一个默认操作,非常常用,利用多个数组,组合成一个新数组。要求,函数位置传递一个null.
$names = array('z1', 'z2', 'z3');
$maths = array(50, 40, 60);
$score = array_map(null, $names, $maths);
var_dump($score);
回调函数的使用-模拟数据结构函数-排序函数array_walk($funcname); 针对一个数组的每个元素进行操作,与array_map的不同点.1. array_map() 可以操作多个数组,而array_walk(); 只可以操作一个数组.1. array_map(); 只可以得到元素值,而array_walk(); 即可以得到元素值,还可以得到元素的键.1. 可以对函数的第一个参数进行引用传递,达到修改的原有数组的目的.
$names = array('aa', 'bb', 'cc');
function fn1 ( &$val,$key ) {
var_dump($val,$key);
}
array_walk($names, 'fn1');
## 模拟数据结构入栈 array_push();出栈 array_pop();// 每次操作后,索引都会重新索引.顶端出: array_shift();顶端入: array_unshift();## 排序函数soft(); 按照值升序rsoft() 按照值降序ksoft()按照键升序krsoft(); 按照键降序 // 值排序,不会保留键值关系,而键排序会保留键值关系.// 按照值排序,同时保留键值关系.asort(); 按照值,升序,保留键值关联.arsort(); 按照值,降序,保留键值关联.key,键reverse(): 反序,默认是升序.association: 关联#php、指针、元素、数组#
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!