2

我知道,如果您手动声明数组中的键,则将其视为散列,如果它是自生成键,则它是一个数组(顺序)。那么如果我手动声明呢

$array1 = array(1 => 123, 2 => 312, 3 => 456);
// and
$array2 = array(123,312,456);

问题:

  1. $array1数组还是哈希?
  2. 我对哈希和数组的想法正确吗?
4

1 回答 1

2

PHP 只使用关联数组。要确定一个数组是否可以是一个索引数组 from 0tosize - 1例如一个元素已经被推入或添加的数组array[] = x,唯一已知的方法是检查所有键是否都是 from 0to size - 1

(请注意,可以通过“关联”方式(即同时提供键和值)构建数组,使用来自 的增量键0,并且无法确定它不是使用上面给出的方法(push[])构建的,因为,无论如何,这没有区别)

$i = 0;
foreach (array_keys($array) as $key) {
  if ($key !== $i) break;  // Note the !== (not !=)
  $i++;
}

if ($i == count($array)) {
  // looks like array was built using indexing (see text above)
}

最后的测试$i == count($array),如果为真,则表示所有的键都是数字的,从 0 开始,每个元素递增 1,直到最后一个元素。

于 2013-06-03T03:58:33.103 回答