我知道,如果您手动声明数组中的键,则将其视为散列,如果它是自生成键,则它是一个数组(顺序)。那么如果我手动声明呢
$array1 = array(1 => 123, 2 => 312, 3 => 456);
// and
$array2 = array(123,312,456);
问题:
- 是
$array1
数组还是哈希? - 我对哈希和数组的想法正确吗?
PHP 只使用关联数组。要确定一个数组是否可以是一个索引数组 from 0
tosize - 1
例如一个元素已经被推入或添加的数组array[] = x
,唯一已知的方法是检查所有键是否都是 from 0
to 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,直到最后一个元素。