数组与数据处理

从零开始编写PHP学习系列教程

第四章:数组与数据处理

4.1 PHP数组的使用

PHP数组是存储多个元素的数据结构,可以通过一个单一的变量访问多个值。数组可以分为索引数组和关联数组两种。
索引数组
索引数组的索引是数字,自动从0开始。创建和访问索引数组的方式如下:

// 创建索引数组
$fruits = array("Apple", "Banana", "Cherry");

// 使用新的数组语法
$fruits = ["Apple", "Banana", "Cherry"];

// 访问数组元素
echo $fruits[0]; // 输出 "Apple"

关联数组
关联数组的索引可以是字符串,用于存储键值对。

// 创建关联数组
$ages = array("Peter" => 22, "Clark" => 32, "John" => 28);

// 使用新的数组语法
$ages = ["Peter" => 22, "Clark" => 32, "John" => 28];

// 访问数组元素
echo $ages["Peter"]; // 输出 22

常用数组函数

  • array_push() 向数组尾部添加一个或多个元素。
  • array_pop() 删除数组的最后一个元素。
  • count() 计算数组中的元素数目或对象中的属性个数。
  • isset() 检测变量是否已设置并且非null。
$numbers = [1, 2, 3];
array_push($numbers, 4); // 数组变为 [1, 2, 3, 4]
$lastItem = array_pop($numbers); // 移除4,数组变为 [1, 2, 3]
echo count($numbers); // 输出 3
echo isset($numbers[2]); // 输出 1 (true)

遍历数组
遍历数组可以使用for循环、foreach循环或数组迭代器。
For循环
适用于索引数组,需要知道数组长度。

$fruits = ["Apple", "Banana", "Cherry"];
for ($i = 0; $i < count($fruits); $i++) {
    echo $fruits[$i] . "\n";
}

image-20240402150533498

Foreach循环
适用于索引数组和关联数组,是PHP遍历数组的推荐方式。

// 索引数组
foreach ($fruits as $fruit) {
    echo $fruit . "\n";
}

// 关联数组
foreach ($ages as $name => $age) {
    echo "$name is $age years old.\n";
}

image-20240402150708791

数组迭代器
使用ArrayIterator或其他SPL提供的迭代器来遍历数组。

$iterator = new ArrayIterator($fruits);
while ($iterator->valid()) {
    echo $iterator->current() . "\n";
    $iterator->next();
}

image-20240402150810308

总结
PHP的数组和数组处理功能非常强大,通过不同的函数和遍历方法可以灵活处理数据。掌握这些基本概念和技能对于开发复杂的PHP应用至关重要。

4.2 数据排序与过滤

在PHP中,有多种内置函数用于数组排序、查找、数据验证和映射操作。这些功能强大的函数可以帮助开发者有效地处理和操作数据。
数据排序
PHP提供了多种数组排序函数,适用于不同的场景和需求。

  • sort():对数组进行升序排序。该函数会重新索引数组。
$numbers = [4, 2, 3, 1];
sort($numbers);
print_r($numbers); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
  • rsort():对数组进行降序排序。该函数也会重新索引数组。
$numbers = [1, 3, 2, 4];
rsort($numbers);
print_r($numbers); // 输出:Array ( [0] => 4 [1] => 3 [2] => 2 [3] => 1 )
  • asort():对数组进行升序排序,保持索引关系。适用于关联数组。
$ages = ["Peter" => 35, "Ben" => 37, "Joe" => 43];
asort($ages);
print_r($ages); // 输出:Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )
  • arsort():对数组进行降序排序,保持索引关系。适用于关联数组。
$ages = ["Peter" => 35, "Ben" => 37, "Joe" => 43];
arsort($ages);
print_r($ages); // 输出:Array ( [Joe] => 43 [Ben] => 37 [Peter] => 35 )
  • ksort():根据键名对数组进行升序排序。
$ages = ["Peter" => 35, "Ben" => 37, "Joe" => 43];
ksort($ages);
print_r($ages); // 输出:Array ( [Ben] => 37 [Joe] => 43 [Peter] => 35 )
  • krsort():根据键名对数组进行降序排序。
krsort($ages);
print_r($ages); // 输出:Array ( [Peter] => 35 [Joe] => 43 [Ben] => 37 )
  • usort():使用用户自定义的比较函数对数组中的值进行排序。
$numbers = [4, 2, 3, 1];
usort($numbers, function($a, $b) {
   return $a <=> $b;
});
print_r($numbers); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

return $a <=> $b; 这行代码在PHP中使用了 spaceship operator(太空船运算符),它是一个三向比较运算符,用于比较两个表达式 $a$b 的值,并根据它们之间的关系返回一个整数值,具体含义如下:

  • 如果 $a 小于 $b,返回 -1
  • 如果 $a 等于 $b,返回 0
  • 如果 $a 大于 $b,返回 1

这个运算符非常方便用于对数组或其他序列进行排序,因为它可以一次性完成大小关系的判断,而不需要分别使用等于、大于和小于的三个条件语句。例如,在排序函数中使用它可以简化排序逻辑的编写。

查找函数

  • array_search():在数组中搜索给定的值,如果成功,则返回相应的键名。

$key = array_search(3, $numbers); // 返回 2


+ in_array():检查数组中是否存在某个值。

```php
if (in_array(3, $numbers)) {
  echo "找到值 3";
}

数据验证和清理

  • filter_var():通过指定的过滤器对变量进行过滤和验证。常用于表单输入验证。
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
   echo "这是一个有效的邮箱地址";
}

image-20240402154119095

数组元素映射

  • array_map():对数组中的每个元素应用回调函数。

$numbers = [1, 2, 3, 4];
s q u a r e d = a r r a y m a p ( f u n c t i o n ( squared = array_map(function( squared=arraymap(function(n) { return $n * $n; }, n u m b e r s ) ; p r i n t r ( numbers); print_r( numbers);printr(squared);


![image-20240402154222545](https://img-blog.csdnimg.cn/img_convert/8f1fe8492cf1e938ac83396aec9b563d.png)

**数组元素映射**

+ array_reduce():使用回调函数迭代地将数组简化为单一的值。虽然不是映射函数,但与array_map()相辅相成,用于对数组数据进行累加或累积运算。

```php
$numbers = [1, 2, 3, 4];
$sum = array_reduce($numbers, function($carry, $item) {
  return $carry + $item;
}, 0);
echo $sum; // 输出:10

以上介绍了PHP中数组处理的函数,它们提供了强大的工具集来进行数组排序、查找、数据验证和元素映射。

更多数组操作函数

  • array_filter():使用回调函数过滤数组中的元素,通常用于移除不需要的元素。该函数不改变原数组键名。

$numbers = [1, 2, 3, 4, 5, 6];
e v e n = a r r a y f i l t e r ( even = array_filter( even=arrayfilter(numbers, function($n) {
return KaTeX parse error: Expected 'EOF', got '}' at position 13: n % 2 == 0; }̲); print_r(even); // 输出:Array ( [1] => 2 [3] => 4 [5] => 6 )


+ arraykeyexists():检查给定的键名或索引是否存在于数组中。

```php
$array = ['a' => 1, 'b' => 2, 'c' => 3];
if (array_key_exists('b', $array)) {
  echo "'b' 存在于数组中";
}
  • array_keys():返回数组所有的键名。

k e y s = a r r a y k e y s ( keys = array_keys( keys=arraykeys(array);
print_r($keys); // 输出:Array ( [0] => a [1] => b [2] => c )


+ array_values():返回数组所有的值。

```php
$values = array_values($array);
print_r($values); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 )

多维数组和复杂数据结构的操作

  • array_multisort():可以用来排序多个数组,或者多维数组的多个维度。
  • arraywalk() 和 arraywalk_recursive():对数组中的每个成员应用用户函数。array_walk_recursive()对数组进行递归操作,可以用于多维数组。

总结
PHP的数组操作函数非常丰富,提供了数据排序、查找、验证和映射等多方面的功能。了解并熟练使用这些函数,可以帮助开发者更加高效地处理和操作数据。实际应用中,常常需要根据具体需求选择合适的函数,有时还会组合使用多个函数以实现复杂的数据操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抵梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值