数组可以在单独的变量名中存储一个或多个值,在PHP中是最常见的数据结构,非常重要。
PHP中创建数组
1. 使用array()函数来构件数组
<?php// [1] 类型单一的数组$arr1 = array('a', 'b', 'c');print_r($arr1);/*Array([0] => a[1] => b[2] => c)*/// [2] 混合类型的数组$arr2 = array('a', 'b', 2, 2.4);print_r($arr2);/*Array([0] => a[1] => b[2] => 2[3] => 2.4)// [3] 键值类型的数组$arr3 = array(0 => 'a', 'c' => 'b', 2, 2.4);print_r($arr3);/*Array([0] => a[c] => b[1] => 2[2] => 2.4)*/*/
2. 使用变量名称+索引值来创建数组
<?php// [1] 不指定下标添加元素,就像入栈 push 将每次添加的元素都从末尾加入。// 而且,数组下标默认从0开始累加。$arr1[] = 1;$arr1[] = 2;$arr1[] = 3;print_r($arr1);/*Array([0] => 1[1] => 2[2] => 3)*/// [2] 指定数组下标加入元素,注意看哪怕3>2>1,数组中元素的排列顺序还是按照默认的末尾添加顺序$arr2[3] = 6;$arr2[2] = 4;$arr2[1] = 2;print_r($arr2);/*Array([3] => 6[2] => 4[1] => 2)*/
3. 类似于js的[]方式,好处是看起来便捷
<?php// 从第二个打印数组的结构中,我们可以明确得出这样一个结论:如果没有指定索引也就是键,它默认从0开始$arr3 = [1, 2, 3];$arr4 = ['a' => 1, 2, 'b' => 3];print_r($arr3);print_r($arr4);/*Array([0] => 1[1] => 2[2] => 3)Array([a] => 1[0] => 2[b] => 3)*/
如果我们是这样一个混乱的数组呢,再来看一下
<?php$arr = ['a' => 1, 3 => 2, 1 => 3, 'c' => 4, 5];print_r($arr);/*Array([a] => 1[3] => 2[1] => 3[c] => 4[4] => 5)我们可以看到,5的索引是数字4.这就表示它会自动寻找并添加一个最大的数字给没有指定的元素,而且是从左到右。哈哈*/
小结
PHP中的数组分类
- 索引数组
- 关联数组
- 多维数组
PHP中数组的特点
- 数据类型可以不同
- 以键值对的形式存在
- 默认数组下标从0开始,一次叠加
- 它不想Java中的数据是定长的
- 如果不指定默认的索引,会自动计算出最大的数字作为索引,从左到右。
- 默认添加是,末尾添加
PHP数组的遍历
1. for循环遍历
<?php// [1] 遍历普通数值型索引数组$arr = [5, 2, 1, 2, 4, 7];for ($i = 0; $i < count($arr); $i++) {echo $arr[$i] . "\t";}// 5 2 1 2 4 7
2. foreach循环遍历
<?php// [1] 遍历非数值索引的关联数组-我们可以选择将键和值都输出查看$age = array("Bill" => "63", "Steve" => "56", "Elon" => "47");foreach ($age as $x => $x_value) {echo "key:$x, value:$x_value \t";}// key:Bill, value:63 key:Steve, value:56 key:Elon, value:47// [2] 我们也可以只查看值不看键foreach ($age as $value) {echo "value:$value \t";}// value:63 value:56 value:47
3. PHP 中的 foreach循环
- PHP中的foreach只能对数组和对象使用,对于其它的数据类型会报错
- 有两种结构
- 1️⃣ foreach($arr as $value) : 只需要键值对中的值
- 2️⃣ foreach($arr as $key => $value):键值对中的值和键我都需要
- 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。不需要在 foreach 循环之前调用 reset()
- foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。
- 一般我自己不愿意在foreach() 内部修改值,但其实这也是可以的
<?php// [1] 通过foreach 将数组内部的元素x2$arr = array(1, 2, 3, 4);foreach ($arr as &$value) {$value = $value * 2;}print_r($arr);unset($value); // 最后取消掉引用/*Array([0] => 2[1] => 4[2] => 6[3] => 8)*/// [2] 变量则不行foreach (array(1, 2, 3, 4) as &$value) {$value = $value * 2;}print_r($arr);
PHP数组的深入分析
PHP数组的排序
1. sort()-由低到高,不保留原索引
- 作用:对数组进行排序由低到高。
- 参数:
- 1️⃣:需要被排序的数组
- 2️⃣:(可选参数)排序的类型标记
SORT_REGULAR- 正常比较单元(不改变类型)SORT_NUMERIC- 单元被作为数字来比较SORT_STRING- 单元被作为字符串来比较SORT_LOCALE_STRING- 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。SORT_NATURAL- 和 natsort() 类似对每个单元以”自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。SORT_FLAG_CASE- 能够与SORT_STRING或SORT_NATURAL合并(OR 位运算),不区分大小写排序字符串。
- 返回值:
- 成功返回True
- 失败返回false
默认升序,数字由小到大排序,字母abcd排序,会重新排列键值,从新排列的索引从新按照0,1,2 这样的来排列
<?php// [1] 不使用参数 对数字数组$arr1 = [5, 2, 1, 2, 4, 7];sort($arr1);print_r($arr1);/*Array([0] => 1[1] => 2[2] => 2[3] => 4[4] => 5[5] => 7)*/// [2] 不使用参数对 字符数组$arr2 = ['bbb', 'apple', 'km', 'cs'];sort($arr2);print_r($arr2);/*Array([0] => apple[1] => bbb[2] => cs[3] => km)*/// [3] 对关联数组$arr3 = ['b' => 'b', 'a' => 'a', 'k' => 'k', 'c' => 'c'];sort($arr3);print_r($arr3);/*Array([0] => a[1] => b[2] => c[3] => k)*/
