PHP 开发工程师基础篇 - PHP 数组

数组 (Array)

数组是 PHP 中最重要的数据类型,可以说是掌握数组,基本上 PHP 一大半问题都可以解决. PHP 数组与其他编程语言数组概念不一样。其他编程语言数组是由相同类型的元素(element)的集合所组成的数据结构,而 PHP 数组元素可以为不同类型的元素。因此说 PHP 数组不是纯粹的数组,而是哈希 (字典) 更为恰当.
PHP 数组可以当作真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组分为关联数组 (类似字典) 和索引数组 (纯数组,键值从数字开始,一般从 0 开始).

为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套精品PHP架构师教程,保证你学了以后保证薪资上升一个台阶。需要的请点击加群(→)点击此处

语法

  • array$arr = array(1, 2, 3);
  • []$arr = [1, 2, 3];

    数组键值注意事项

PHP 数组的键值仅支持字符串 (string) 和整型 (integer). 其他类型均会转换数字或字符串。浮点类型会被转换为整型类型的,8.7->8. 布尔类型则会转换为整型类型的,true->1, false->0. Null 会被转换为空的字符串,数组和对象则不会转换成为字符串类型和整型。会抛出一个警告: Illegal offset type.

注意的是字符串类型假如是有效十进制数字的话,则会转换为整型. "8"->8. 若不想转换则在数字前添加 "+" 符号.

// 02不是有效十进制数字
$arr = ['1' => 'a', '+1' => 'b', '02' => 'c'];
/**
 array(3) {
  [1]=>
  string(1) "a"
  ["+1"]=>
  string(1) "b"
  ["02"]=>
  string(1) "c"
}
 */
var_dump($arr);
// 数组的键值可以不用有键值, 下面这个数组最大数字是6,所以在它后面的元素,则是在它基础上+1
$array = array(
         "a",
         "b",
    6 => "c",
         "d",
);
/**
 array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}
 */
var_dump($array);

 

数组基本操作 (增删改查)

通过在方括号 ([]) 内指定键名来给数组赋值实现的增加和修改元素,也可以省略键名.

增加数组的元素

// 索引数组
$arr = [1, 2, 3];
$arr[] = 4; // [1, 2, 3, 4]
// 关联数组
$arr1 = ['a' => 1, 'b' => 2];
$arr1['c'] = 3; // ['a' => 1, 'b' => 2, 'c' => 3]
// 混合数组
$arr3 = ['a' => 1, 'b' => 2];
$arr3[1] = 3; // ['a' => 1, 'b' => 2, 1 => 3]

删除数组的元素

$arr = [1, 2, 3];
// 删除数组中值为3的, 注意的是数组不会被重新索引(索引数组)
unset($arr[2]);
$arr[] = 3;
/**
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[3]=>
int(3)
}
*/
var_dump($arr);
  • 改变数组的元素$arr = [1, 2, 3]; $arr[0] = 'a'; var_dump($arr); ['a', 2, 3]
  • 查询数组的元素$arr = [1, 2, 3]; var_dump($arr[0]); // 1

 

其他类型转换为数组

除了对象 (Object) 转换数组外,对于对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0.
(array)$scalarValue 与 array ($scalarValue) 一样。而对象 (object) 类型转换为 array. 其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

class A {
    private $A; // This will become '\0A\0A'
}

class B extends A {
    private $A; // This will become '\0B\0A'
    protected $B // This will \0*\0A
    public $AA; // This will become 'AA'
}
// 会有两个键名为 'AA',不过其中一个实际上是 '\0A\0A'。
/**
 array(4) {
  ["BA"]=>
  NULL
  ["*B"]=>
  NULL
  ["AA"]=>
  NULL
  ["AA"]=>
  NULL
}
 */
var_dump((array) new B());

 

数组函数分类

  1. 创建数组
    array_combine (array $keys , array $values) : array — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
$key = ['a', 'b', 'c'];
$value = [1, 2, 3];
print_r(array_combine($key, $value)); // ['a' => 1, 'b' => 2, 'c' => 3]

array_fill_keys (array $keys , mixed $value) : array — 使用指定的键和值填充数组

$keys=['red','blue','green'];var_dump(array_fill_keys($keys,1));// ['red' => 1, 'blue' => 1, 'green' => 1]

array_fill (int $start_index , int $num , mixed $value) : array — 用给定的值填充数组

var_dump(array_fill(0, 0, 1)); // []
var_dump(array_fill(1, 3, 'red')); // [1=>'red', 2=>'red', 3=>'red']

array — 新建一个数组

// array() 是语言结构, 不是常规函数
$a = array(1, 2, 3);

compact (mixed $varname1 [, mixed $...] ) : array — 建立一个数组,包括变量名和它们的值

$a = 'apple';
$b = 'banana';
$d = 'lemon';
$sweet = ['b', 'd'];
$result = compact('a', $sweet); // ['a' => 'apple', 'b' => 'banana', 'd' => 'lemon']

range (mixed $start , mixed $end [, number $step = 1] ) : array — 根据范围创建数组,包含指定的元素

var_dump(range(1, 5)); // [1, 2, 3, 4, 5]
var_dump(range(0, 100, 10)); // [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

数组分割

  • array_chunk (array $array , int $size [, bool $preserve_keys = FALSE] ) : array — 将一个数组分割成多个
$a = ['a' => 1, 'B' => 2, 3 => 'c', 'A' => 4, 'b' => 6];
print_r(array_chunk($a, 2)); // [[1, 2], ['c', 4], [6]]
print_r(array_chunk($a, 2, true)); // [['a' => 1, 'B' => 2], [3 => 'c', 'A' => 4], ['b' => 6]]

array_slice (array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE]] ) : array — 从数组中取出一段

$input = ['a', 'b', 'c', 'e', 'f'];
var_dump(array_slice($a, 2)); // ['c', 'e', 'f']
var_dump(array_slice($a, 2, 1)); // ['c']
var_dump(array_slice($a, -1, 1)); // ['f']
var_dump(array_slice($a, -1, 1, true)); [4 => 'f']
var_dump(array_slice($a, 0, 6)); // ['a', 'b', 'c', 'e', 'f']

数组队列或栈操作

  • array_pop (array &$array) : mixed — 弹出数组最后一个单元(出栈)
$arr1 = ['yellow', 'green', 'red']
var_dump(array_pop($arr1)); // 'yellow'

array_push (array &$array [, mixed $...] ) : int — 将一个或多个单元压入数组的末尾(入栈)

var_dump(array_push([1, 2, 3], 4, 5)) // 2 

array_shift (array &$array) : mixed — 将数组开头的单元移出数组

$a ['php', 'c', 'python'];
var_dump(array_shift($a));// 'php'

array_unshift (array &$array [, mixed $...] ) : int — 在数组开头插入一个或多个单元

$queue = ['orange', 'banana'];
var_dump(array_unshift($queue, 'apple')); // 3
var_dump($queue);

数组数学运算.

array_count_values (array $array): array — 统计数组中所有的值

print_r(array_count_value([1, 'hello', 1, '
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值