php中的数组

本文详细介绍了PHP中的数组概念,包括索引数组、关联数组和混合数组的定义方式,以及如何进行数组赋值、访问和遍历等操作。同时,还讲解了数组的操作函数和预定义超全局数组变量等内容。

第五章 数组

PHP中,数组是由一个或者多个数组元素组成的,每个数组由键(Key)和值(Value)构成

数组的分类

索引数组

索引数组是指键名为整数的数组。默认情况下,索引数组的键名是从0开始的,并一次递增,主要适用于利用位置(0,1,2,3…)来标识数组元素的情况,索引数组的键名也可以自己指定

关联数组

关联数组是指键名为字符串的数组,通常情况下,关联数组元素的“键”和“值”有一定的业务逻辑关系。

数组的使用

定义数组

(1)定义索引数组

<?php
$students=array(
    array(1,'mary',60.5),
    array(2,'John',80.5),
    array(3,'Tom',79.3)
);
var_dump($students);

这是一个二维数组,在省略键名的设置时,默认从0开始,依次增加1,因此该数组的键名一次为“0,1,2”。除此之外,还可以根据实际需要定义数组元素

(2)定义关联数组

<?php
$info=array('id'=>10,'name'=>'Tom','tel'=>1908908980890);
var_dump($info);

(3)定义混合数组

$temp=array();
$mixed=array(2,'str','id'=>5,5=>'b','a');
var_dump($mixed);
var_dump($temp);

上述示例定义了一个空数组temp和混合数组temp和混合数组tempmixed。其中,$mixed数组元素“b"制定了数字键名为“5”,则其后的“a"元素会自动将前面最大的数字键名加1后作为键名,5+1得到6

数组赋值

<?php
$arr[]=123;         //$arr[0]=123
$arr[]='hello';     //$arr[1]='hello'
$arr[4]='PHP';      //$arr[4]='PHP'
$arr['name']='Tom'; //$arr['name']='Tom'
$arr[]='JAVA';      //$arr[5]='JAVA'
var_dump($arr);

访问数组

通过”数组名[健]"的方式来访问

<?php
$data=array('goods'=>'clothes','num'=>23,'sales'=>500,5=>'hh');
echo $data['goods'];
echo $data['num'];
echo $data[5];

遍历数组

用foreach完成遍历

<?php
$info=['id'=>1,'usr'=>'Miranda','age'=>18];
foreach($info as $k=>$v)
{
    echo $k,':',$v,'<br>';
}

foreach引用赋值

<?php
$info=[1,2,3];
foreach($info as $k=>&$v)
{
    $v=$v+2;
}
print_r($info);

遍历二维数组

<?php
$arr=array(
    array(1,2,3,4),
    array(1,2,3,4),
    array(1,2,3,4),
    array(1,2,3,4),
);
foreach ($arr as $value)
{
    foreach ($value as $item) {
        echo $item;
    }
}

数组的删除

<?php
$info=[1,2,3];
foreach($info as $k=>&$v)
{
    $v=$v+2;
}
print_r($info);
unset($info[1]);
print_r($info);

数组操作符

数组查找

数组排序

数组常用函数

指针操作数组

函数名称功能描述
current()获取数组中当前指针指向的元素的值
key()获取数组中当前指针
next()将数组中的内部指针向前移动一位
prev()将数组中的内部指针倒回一位
each()获取数组中当前的键值对并将数组指针向前移动一步
end()将数组的内部指针指向最后一个元素
reset()将数组的内部指针指向第一个元素

(1)通过指针函数访问数组

<?php
$arr=['a','b','c','d'];
var_dump($arr);
echo '<br>获取数组中当前指针,获取数组中当前指针指向的元素的值';
echo key($arr).'-'.current($arr);
echo '<br>将数组中的内部指针向前移动一位';
echo next($arr);
echo '<br>将数组的内部指针指向最后一个元素';
echo end($arr);
echo '<br>将数组中的内部指针倒回一位';
echo prev($arr);
echo '<br>将数组的内部指针指向第一个元素';
echo reset($arr);

数组元素操作函数

(1)array_count_values()

<?php
$a=array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));
?>

预定义超全局数组变量

已经定义好了(存在)的变量(存放的数据类型是数组)

超全局:超级全局变量,作用域(有效区域)

<?php
var_dump($_POST);
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form method="post">
        <input type="text" name="tom">
        <button type="submit"></button>
    </form>
</body>
</html>
<think> 首先,用户的问题是关于在PHP中如何将数组与数值进行相加操作。用户说:“我想了解在PHP中如何将数组与数值进行相加操作 请问PHP数组与数值相加的方法”。 现在,我需要回顾系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 从用户的问题来看,这不是数学问题,而是编程问题。所以,我应该避免不必要的数学表达式,除非有逻辑需要表达。 用户提供了引用: - 引用[1]:关于PHP数组相加操作,涉及关联数组的键检查和遍历。 - 引用[2]:关于取数组中几个数值求和等于指定值的算法。 用户指定:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 我需要查看上下文。 用户说:“请尽可能多的参考用户上一次的问题和你的回答。” 但是在这个对话中,我没有上一次的回答。这是当前的对话: - 系统级指令。 - 示例。 - 用户的问题。 在之前的消息中,用户没有其他的“上一次问题”。可能用户指的是之前的交互,但在这个线程中,这是第一个用户查询。所以,我应该基于当前问题回答。 用户的核心需求:如何在PHP中将数组与数字数值相加。意思是,一个数组加一个数字,比如 [1,2,3] + 5 应该得到什么?用户可能误解了“相加”的意思。 在PHP中,数组相加 (+) 运算符用于合并数组,而不是数值相加。+ 运算符用于数组时,是联合操作,它添加右边数组的元素到左边数组,如果键不存在。 用户说“数组与数值进行相加操作”,数值可能是数字值。所以,用户可能想: - 要么是数组中的每个元素加一个数字(标量加法)。 - 要么是数组整体加一个数字(但这不是标准操作)。 从引用中: - 引用[1]谈论的是两个数组相加,而不是数组和数值。 - 引用[2]谈论的是数组中取几个数求和等于指定值。 用户的需求是“数组与数值相加”,所以我应该解释PHP中的行为。 在PHP中: - 如果你写 $array + 5,这会尝试将数组和整数相加,但PHP会抛出一个警告,因为数组和整数不能直接相加。+ 运算符对于数组是定义的联合操作。 标准方法是: 1. 使用 array_map 函数来对数组中的每个元素加一个数字。 2. 或者手动遍历数组添加数字。 例如: ```php $array = [1, 2, 3]; $value = 5; $result = array_map(function($item) use ($value) { return $item + $value; }, $array); // 结果: [6, 7, 8] ``` 或者: ```php foreach ($array as &$item) { $item += $value; } ``` 用户可能混淆了“相加”操作。在引用[1]中,它讨论了数组相加(数组合并),这可能误导用户。 我应该澄清概念: - 数组相加:在PHP中,+ 运算符用于数组联合。 - 数组元素与数值相加:需要使用函数或循环。 结构我的回答: 1. 解释PHP中运算符的行为。 2. 提供正确的方法。 3. 使用代码示例。 4. 引用相关的引用,如果适用。 生成相关问题:指令说“生成相关问题”,所以我应该在回答后添加相关问题。 引用:在回答中,如果引用引用[1]或[2],需要自然地添加引用标识。 用户的问题基于引用,所以我应该参考它们。 引用[1]讨论了数组相加(合并),引用[2]讨论了数组中取数和求和。 对于“数组与数值相加”,引用[1]可能不太相关,但可以提到它解释了数组操作。 最好直接回答用户的查询。 回答结构: - 先确认用户的需求。 - 解释PHP的 + 运算符用于数组时是联合操作。 - 说明数组与数值直接相加不合法。 - 提供正确方法:使用 array_map 或遍历。 - 给出代码示例。 - 然后生成相关问题。 使用中文回答。 代码块:在回答中包含代码时,像示例中那样使用代码块。 最后,添加相关问题。 相关问题可能包括: 1. PHP中如何对数组中的所有元素进行数学运算? 2. PHP数组合并的其他方法? 3. 如何处理多维数组的数值相加? 确保回答真实可靠。 </think> ### PHP数组与数值相加的操作方法 在PHP中,将数组与一个数值(例如整数或浮点数)进行“相加”操作时,需要注意PHP的运算符行为。PHP的 `+` 运算符默认用于**数组联合**(即合并数组),而不是数值加法。如果直接尝试 `$array + $number`,PHP会抛出警告或错误(如 `Unsupported operand types`),因为数组和标量数值类型不兼容[^1]。要实现数组中每个元素与一个数值相加(即标量加法),需要使用循环或函数式方法。以下是详细解释和实现方式。 #### 1. **理解PHP运算符行为** - PHP的 `+` 运算符用于数组时,表示**键值联合**:它将右侧数组中不存在于左侧数组的键值对添加到结果中(忽略键冲突)。 - 例如:`$array1 + $array2` 合并两个数组,不会对元素值进行数值加法。 - 数值加法(如每个元素加5)不能直接使用 `+`,必须逐个元素处理。 #### 2. **正确实现数组与数值相加的方法** - **使用 `array_map()` 函数**:这是最简洁的函数式方法,对数组每个元素应用数值加法。 语法:`array_map(callable $callback, array $array)` ,其中 `$callback` 定义加法逻辑。 ```php // 示例:数组每个元素相加一个数值 $array = [1, 2, 3]; // 原始数组 $number = 5; // 要加的数值 $result = array_map(function($item) use ($number) { return $item + $number; // 每个元素加 $number }, $array); // 结果:$result = [6, 7, 8] ``` 这种方法高效且易,适用于索引数组或关联数组(值会被修改,键保留)。 - **使用 `foreach` 循环**:适合需要原地修改数组或处理复杂逻辑的场景。 ```php // 示例:遍历数组添加数值 $array = ['a' => 10, 'b' => 20]; // 关联数组示例 $number = 5; foreach ($array as $key => &$value) { // 引用修改原数组 $value += $number; // 每个值加 $number } unset($value); // 清除引用 // 结果:$array = ['a' => 15, 'b' => 25] ``` - **注意**:循环中需使用引用 `&$value` 来直接修改数组元素,否则需创建新数组。 - **特殊场景处理**: - **多维数组**:需要使用递归或嵌套 `array_map`。 ```php $array = [[1, 2], [3, 4]]; $number = 5; $result = array_map(function($subArray) use ($number) { return array_map(function($item) use ($number) { return $item + $number; }, $subArray); }, $array); // 结果:$result = [[6, 7], [8, 9]] ``` - **数组求和后再加数值**:如果用户本意是计算数组总和再加一个数值,使用 `array_sum()`。 ```php $array = [1, 2, 3]; $number = 5; $sum = array_sum($array) + $number; // 结果:11 ``` #### 3. **注意事项** - **类型安全**:确保数组元素都是数值类型(如整数、浮点数)。如果包含非数值元素(如字符串),加法可能导致意外转换(例如 `'a' + 5` 结果为 `5`)。 - **性能**:`array_map` 适用于大数组,因为它内部优化了遍历;`foreach` 在修改原数组时更直接。 - 引用[1]中提到数组合并时需检查键的存在性,但数值加法不涉及键冲突问题,因为它是元素级运算[^1]。 通过上述方法,您可以安全地在PHP中实现数组与数值的相加操作。如果需要更复杂的逻辑(如引用[2]中提到的“取数组中几个数值求和等于指定值”),可以使用组合算法,但本场景聚焦于简单的标量加法[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值