php - PHP 是否(在内部)以不同方式处理数字索引数组?

标签 php arrays performance

...比关联数组?

关联数组会占用更多内存吗?

$arr = array(1, 1, 1);
$arr[10] = 1;
$arr[] = 1; // <- index is 11; does the array become associative here?

最佳答案

简而言之,PHP 没有非关联数组。

@Sectus 对 PHP 数组的底层实现发表了一个很好的回答。了解“引擎盖下”发生的事情通常是有益的。但是不管它们的底层实现如何,PHP 数组都是作为与键关联的值的有序映射(即关联数组)公开 给 PHP 开发人员的。总是。

来自 PHP:Arrays - Manual

An array in PHP is actually an ordered map. A map is a type that associates values to keys.

PHP arrays can contain integer and string keys at the same time as PHP does not distinguish between indexed and associative arrays.

The key can either be an integer or a string.

数组是数字索引的误解是由于整数键在没有明确指定键的情况下为了方便而自动递增的特性引起的。

但是请注意,即使所有的键都是整数,在 PHP 中也不能保证一个项目存在于例如 $arr[0],据我所知,这在任何其他语言中都是给定的,确实使用索引数组(即,假设索引数组包含至少一个元素,并且从 0 开始)。

这不是微分。恕我直言,那些依赖 PHP 数组表现得像索引数组的程序员没有考虑潜在后果或不了解差异*可能会让自己(或 future 的维护者)为奇怪/意外的行为做好准备。

*我已经对此进行了限定,因为显然在某些情况下,明智的决定利用 PHP 语言围绕数组的类似索引的便利/功能可以提供好处。

关于php - PHP 是否(在内部)以不同方式处理数字索引数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15614566/

相关文章:

php - Redis如何组合排序集?

php - 向用户显示错误或 php + mysql 代码。可以提取哪些信息以及如何防止这种情况?

php - 如何使用 php codeigniter 将特定表内容(给定条件)复制到新的数据库表中

php - 突然无法读取数据库?

javascript - 数组中的数组: How to store array data in an array

javascript - 如何测量nodejs中异步函数的执行时间?

ios - Xcode 运行真的很慢

html - 什么是更快的性能明智? IE 过滤器或 Sprite /图像

使用 memcpy 将二维动态数组(指针)复制到静态数组

php - 从 php 数组简单更新 MySQl 表