PHP数组键名与索引操作
PHP数组的键名可以是整数或字符串。不同键名类型的行为不一样。今天说说数组键名的使用技巧。
数字键名和字符串键名的区别。
```php
$arr = [1, 2, 3];
$arr['name'] = '张三';
$arr[] = 4;
print_r($arr);
// 自动索引: 最大数字键+1
?>
键名的自动转换。
```php
// 字符串数字键会被转成整数
$arr = ['1' => 'a', '2' => 'b'];
var_dump($arr);
// 键名是整数1和2
// null变成空字符串
$arr[null] = '空键';
echo $arr[''] . "\n";
// true变成1,false变成0
$arr[true] = '真';
echo $arr[1] . "\n";
?>
键名存在性检查。
```php
$arr = ['name' => '张三', 'age' => 28, 'email' => null];
echo isset($arr['name']) ? '存在' : '不存在' . "\n";
echo isset($arr['email']) ? '存在' : '不存在' . "\n"; // null的键被认为不存在
echo array_key_exists('email', $arr) ? '存在' : '不存在' . "\n"; // true
if (key_exists('name', $arr)) {
echo "name键存在\n";
}
?>
获取所有键名和值。
```php
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
$keys = array_keys($arr);
print_r($keys);
$values = array_values($arr);
print_r($values);
$keyValue = array_flip($arr);
// 值变成键名(值必须可作键名)
print_r($keyValue);
?>
数组指针操作。
```php
$arr = [10, 20, 30, 40, 50];
echo current($arr) . "\n"; // 10
echo next($arr) . "\n"; // 20
echo next($arr) . "\n"; // 30
echo prev($arr) . "\n"; // 20
echo end($arr) . "\n"; // 50
echo reset($arr) . "\n"; // 10
?>
数组键名在JSON编码时的行为。
```php
$arr1 = ['a', 'b', 'c'];
echo json_encode($arr1) . "\n"; // ["a","b","c"]
$arr2 = ['name' => '张三', 'age' => 28];
echo json_encode($arr2, JSON_UNESCAPED_UNICODE) . "\n"; // {"name":"张三","age":28}
$arr3 = [0 => 'a', 2 => 'b', 3 => 'c'];
echo json_encode($arr3) . "\n"; // {"0":"a","2":"b","3":"c"},键名不连续时变成对象
?>
理解PHP数组的键名机制很重要。isset和array_key_exists的区别要分清。键名的自动转换可能导致意外的行为,特别是在从数据库读取数据时。
PHP数组键名与索引操作
张小明
前端开发工程师
Windows 11终极去广告与系统优化指南:Win11Debloat让你的电脑飞起来
Windows 11终极去广告与系统优化指南:Win11Debloat让你的电脑飞起来 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to dec…
RT5xx硬件AES加密实战:PUF密钥与CTR模式构建嵌入式安全堡垒
1. 项目概述:在RT5xx上构建硬件级AES加密方案在嵌入式开发,尤其是物联网和边缘计算设备中,数据安全不再是“加分项”,而是“必选项”。最近在为一个工业网关项目做安全加固时,我深入研究了NXP RT5xx系列微控制器的硬件…
Node-Influx 在企业级应用中的应用:监控、日志分析和物联网数据处理
Node-Influx 在企业级应用中的应用:监控、日志分析和物联网数据处理 【免费下载链接】node-influx 📈 The InfluxDB Client for Node.js and Browsers 项目地址: https://gitcode.com/gh_mirrors/no/node-influx Node-Influx 作为一款专业的 Infl…
微信记账小程序毕业设计全套源码:SpringBoot后端+uni-app前端+MySQL建表脚本
本文还有配套的精品资源,点击获取 简介:直接可用的毕业设计级记账小程序工程,前端用uni-app开发,一键编译适配微信小程序,界面含登录页、记账列表、个人中心、分类统计等截图(login.jpg、jl.jpg、gr.jpg…
BSManager:一键解决Beat Saber版本管理难题的终极指南
BSManager:一键解决Beat Saber版本管理难题的终极指南 【免费下载链接】bs-manager An all-in-one tool that lets you easly manage BeatSaber versions, maps, mods, and even more. 项目地址: https://gitcode.com/gh_mirrors/bs/bs-manager 你是否曾因Be…
蓝牙LE设备无线固件升级(OTA)实战:基于NXP FRDM-KW36与MCUXpresso
1. 项目概述:为什么蓝牙LE设备的无线固件升级如此重要?在物联网和嵌入式开发领域,设备一旦部署到现场,无论是挂在工厂车间的传感器,还是戴在用户手腕上的智能手环,物理接触都变得异常困难甚至不可能。想象一…