PHP数组效率和内存澄清

时间:2010-06-14 14:25:37

标签: php arrays memory memory-management

在PHP中声明一个数组时,索引可能无序创建......即

数组[1] = 1 数组[19] = 2 数组[4] = 3

我的问题。在创建这样的数组时,长度为19,中间是否为空?如果我试图获取Array [3]它会是未定义还是抛出错误?另外,这会如何影响记忆。 3指数的记忆会被占用还是19?

目前开发人员还编写了一个包含3个数组的脚本FailedUpdates [] FailedDeletes [] FailedInserts []

以这种方式执行它是否更有效,或者在控制多个子数组的关联数组的情况下执行此操作

"Failures" array(){
    ["Updates"] => array(){
           [0] => 12
           [1] => 41
                   }
    ["Deletes"] => array(){
           [0] => 122
           [1] => 414
           [1] => 43
                   }
    ["Inserts"] => array(){
           [0] => 12
                   }
}

3 个答案:

答案 0 :(得分:4)

除非你处理真正庞大的数组/大量变量,否则你需要在PHP中担心内存效率。

PHP中的数组并不像C ++中的数组或类似的低级语言; PHP中的数组是一个地图。您有一个键列表(必须是唯一的,所有类型字符串或整数),以及与键对应的值列表。所以以下是一个合法的数组:

array(0 => 'butt', 1 => 'potato', 2 => 'tulip')

也是如此

array(5 => 'i', 'barry' => 6, 19 => array(-1 => array(), 7 => 'smock'))

在这两种情况下,数组中有3个条目,因此有3个键和3个值。

除了数组中的键和值之外,还可以通过键/值对出现的 order 来区分一个数组。如果您定义一个数组以使其具有非负整数作为键,则这通常是预期的顺序。当您使用foreach()等构造时,顺序很重要。

答案 1 :(得分:1)

array [3]将是未定义/未设置但不会导致错误,并且该数组将仅使用内存用于该3个值 - php与C不同,您必须查看这些内容。

答案 2 :(得分:1)

  • 访问$ arr [3]会发出通知:Notice: Undefined offset: 3 in /data/home/sjoerd/public_html/svnreps/test/a.php on line 3。您可以通过isset()array_key_exists()
  • 查看来避免这种情况
  • 没有存储空值。
  • 拥有空元素不会占用额外的内存。
  • 是否应使用多个变量或数组取决于上下文以及如何使用变量。