这是对我之前的问题的深入探讨:Can items in PHP associative arrays not be accessed numerically (i.e. by index)?
根据W3Schools,:
在PHP中,有三种 阵列:
- 数字数组 - 具有数字索引的数组
- 关联数组 - 每个ID键与值
关联的数组- 多维数组 - 包含一个或多个数组的数组
但这是准确的吗?可以为数组中的每个元素分配索引或字符串作为键 - 那么当两者在同一个数组中混合时会发生什么?
$myArray[0] = 'value1';
$myArray['one'] = 'value2';
答案 0 :(得分:6)
PHP中的所有数组都是相同的;它们被实现为散列映射,它将键与值相关联,无论键的类型如何。
索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引。
如果数组同时具有数字和非数字索引,我仍称它为关联数组。 “联想”的含义仍然存在。
关联数组是一种抽象数据类型,由一组唯一键和一组值组成,其中每个键与一个值(或一组值)相关联。
...
从计算机程序员的角度来看,关联数组可以被视为数组的泛化。虽然常规数组将整数键(索引)映射到任意数据类型的值,但关联数组的键也可以任意键入。在某些编程语言中,例如Python,关联数组的键甚至不需要是相同的类型。
对于最后一句,同样适用于PHP,如您的示例所示。
答案 1 :(得分:6)
PHP实际上没有数组。他们是字典。数字键与字符串键同时允许。它们可以混合在一起并且共存。
(实际上像“123”这样的字符串键总是被视为整数.PHP不会保留它们的类型信息。)
如果您想要一种不同的行为,您可以实现并扩展ArrayObject。并且可以实现一个映射,其中数字键用作字符串索引的别名。
答案 2 :(得分:4)
通常,您应该阅读official documentation而不是W3Schools。
数组可以包含它想要的任何成员,无论它想要什么键。
W3Schools提供的描述很模糊,甚至是错误的。
- 数字数组 - 具有数字索引的数组
我会说数字数组是一个只有 整数索引的数组。一个 one 的数组我可能会调用 mixed (或关联,见下文)数组,如果我不得不调用它。
- 关联数组 - 每个ID键与值相关联的数组。
我不知道那个描述。我会说如果数组可以是关联的,如果它将字符串映射到值而不是数字索引。
- 多维数组 - 包含一个或多个arraysNumeric数组的数组 - 具有数字索引的数组
关联数组也可以包含数组,这使得它是多维的。
请记住,包含所有数字键的数组(即使在字符串中)将始终被视为数字数组。这可能意味着不同背景下的不同事物。
$arr = array(
'1' => 'abc',
2 => 'def'
);
var_dump($arr);
array(2) {
[1]=>
string(3) "abc"
[2]=>
string(3) "def"
}
答案 3 :(得分:0)
你得到一个关联数组。试试这段代码:
$myArray[0] = 'value1';
$myArray['one'] = 'value2';
echo($myArray[1]);
请参阅?它没有回应任何东西。
答案 4 :(得分:0)