《数据结构与算法 PHP 语言描述》01 数组

几乎任何一门编程语言都有数组,它是计算机编程中最常见的数据结构。因为数组是编程语言自带的,通常效率很高,能够满足不同需求的数据存储。让我们来学习 PHP 中数组的工作原理,以及使用的场景。

PHP 中数组的定义

首先我们了解下,数组的标准定义:数组,是有序的元素序列,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。

PHP 中的数组实际上是一个有序映射。映射是把 values 关联到 keys 的类型。这个类型在很多方面做了优化,因此可以把它当成是真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。另外,数组元素的值也可以是另一个数组,树形结构和多维数组都是可以的。

使用数组

PHP 中的数组很强大。有多种创建和存取元素的方法,也可以通过不同的方式对数组进行查找和排序。同时还提供了一系列函数,方便对数组做各种各样的操作。

创建数组

最简单的方式是使用 array() 或 [] 语言结构来创建一个数组变量:

<?php
$array = array();
$array = [];

使用这种方式创建数组,你将得到单元数量为 0 的空数组。可以通过内建的 count 方法来验证这一点:

$ php -r "echo count(array());"
0

另外,创建数组的时候还可以直接放入一组元素:

<?php
$array = array(1, 2, 3, 4, 5);
$array = [1, 2, 3, 4, 5];

echo count($array); // 5

在 PHP 中,数组中的元素可以是任意类型的值,这个和很多编程语言不同,如下所示:

<?php
$array = [1, 'apple', true, null];

可以使用 is_array 函数来判断一个对下是否是数组,如下所示:

<?php
$number = 3;
$array = [8, 16, 32];
var_dump(is_array($number)); // bool(false)
var_dump(is_array($array)); // bool(true)

我们讨论了创建数组的几种方式,其中从 5.4 起可以使用短数组定义语法,用 [] 代替 array()。

读取数组

在一条赋值语句中,可以使用 [] 操作符将数据赋值给数组,比如下面的循环,将 1~100 的数字赋值给一个数组:

<?php
$numbers = [];

for ($i = 0; $i < 100; $i++) {
    $numbers[$i] = $i + 1;
}

还可使用 [] 操作符读取数组中的元素,如下所示:

<?php
$array = [1, 2, 3, 4, 5];
$sum = $array[0] + $array[1] + $array[2] + $array[3] + $array[4];
echo $sum; // 15

如果要依次读取数组中的所有元素,使用 for 循环会更加简单:

<?php
$numbers = [1, 3, 5, 9, 15, 18, 26];
$sum = 0;

for ($i = 0; $i < count($numbers); $i++) {
    $sum += $numbers[$i];
}

echo $sum; // 77

其中,我们使用 count 函数来控制循环次数,count 可以计算出数组中的单元数目,从而确保循环遍历了数组中的所有元素。

由字符串生成数组

使用字符串函数 explode 可以用一个字符串分隔另一个字符串,该方法通过一些常见的分隔符,比如分隔单词的空格,将一个字符串分成几部分,并将每部分作为一个元素保存到一个新建的数组中。

下面一个小程序演示了 explode 方法的工作原理:

<?php
$sentence = 'Hi zhanbai, I like this book!';
$words = explode(' ', $sentence);

for ($i = 0; $i < count($words); $i++) {
    echo 'word ' . $i . ': ' . $words[$i] . PHP_EOL;
}

输出:

word 0: Hi
word 1: zhanbai,
word 2: I
word 3: like
word 4: this
word 5: book!

另外,str_split 函数也可以将字符串转换为数组,不同的是它是通过设定元素的长度进行分割。preg_split 函数可以通过一个正则表达式分隔字符串为数组。

对数组的整体性操作

有些操作是将数组作为一个整体进行的。首先,可以将一个数组赋给另一个数组:

<?php
$numbers = [];

for ($i = 0; $i < 10; $i++) {
    $numbers[$i] = $i + 1;
}

$same_numbers = $numbers;

当把一个数组赋值给另一个数组时,相当于创建了一个新的数组,当你修改了赋值数组的值,被赋值的数组并不会改变。下面的代码展示了这种情况:

<?php
$numbers = [];

for ($i = 0; $i < 10; $i++) {
    $numbers[$i] = $i + 1;
}

$same_numbers = $numbers;
$numbers[0] = 20;
echo $same_numbers[0]; // 1

如果我们想要被赋值的数组随着原数组的改变而改变,可以使用引用赋值的方式,简单的将一个 & 符号加到要赋值的数组前(源数组):

<?php
$numbers = [];

for ($i = 0; $i < 10; $i&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值