PHP 如何索引关联数组?

How does PHP index associative arrays?

据我所知,在associative arrays中,如果没有设置keys,会自动设置。但在这种情况下似乎没有意义:

$a = array( '1' => 'One', '3', '2' => 'Two');
print_r($a);

输出:

Array ( [1] => One [2] => Two )

那么“3”在哪里?

在您的用户定义数组中,您手动分配键您的数组意味着

array(1 => 'One',3, 2 => 'Two');//[1] => One [2] => 3 [2] => Two

这里我们有两个相同的索引,根据DOCS它提到最后一个覆盖第一个

Syntax "index => values", separated by commas, define index and values. index may be of type string or integer. When index is omitted, an integer index is automatically generated, starting at 0. If index is an integer, next generated index will be the biggest integer index + 1.

Note that when two identical index are defined, the last overwrite the first.

为了过滤这种情况,您可以简单地进行一些更改,如

array(1 => 'One',2 =>'Two',3) // array ([1] => One [2] => Two [3] => 3)
array(3,1 => 'One',2 =>'Two') //array ([0] => 3 [1] => One [2] => Two)
array(1 => 'One',2 => 3 ,3 =>'Two')// array([1] => One [2] => 3 [3] => Two)

DOCS CHECK PARAMETERS

在php键是可选的。如果不指定,PHP将使用之前使用过的最大整数key

的增量

就像 :-

$a = array( 1 => 'One', 3, 3 => 'Two');
var_dump($a);

输出将:-

array(3) {
  [1]=>
  string(3) "One"
  [2]=>
  int(3)
  [3]=>
  string(3) "Two"
}

此处的第二个值是从前一个值递增,即 2。

现在

假设数组是:-

$a = array( '1' => 'One', '3', '3' => 'Two');
var_dump($a);

输出会

array(3) {
  [1]=>
  string(3) "One"
  [2]=>
  string(1) "3"
  [3]=>
  string(3) "Two"
}

这里也是这里的第二个值,一个是从以前的值增加,即 2。

现在第三种情况:-

如果数组是:-

$a = array( '1' => 'One', '1' => 'two' , '1' => 'Three');
var_dump($a);

输出将:-

array(1) {
  [1]=>
  string(5) "Three"
}

这是因为关联数组将值保留为映射,如果存在键,它会覆盖值,在这种情况下,1 会被覆盖 2 次,结果输出为 3

你的情况:-

$a = array( '1' => 'One', '3', '2' => 'Two');
print_r($a);

输出为

Array
(
    [1] => One
    [2] => Two
)

这是因为 :-

第一个关键地图将:- '1' => 'one'

再次

php 将保留第二个值作为 '2' => '3'

现在,数组“2”被分配为 'Two',值变为

'2' => 'Two'表示正在覆盖

@Uchiha 是正确的,就像该答案的包含一样,如果您想避免此问题,请将数组成员(没有指定键)保留在最后


$a = array( '1' => 'One', '3', '2' => 'Two');

会转储

array (size=2)
  1 => string 'One' (length=3)
  2 => string 'Two' (length=3)


并最终保留具有未定义键的成员

$a = array( '1' => 'One', '2' => 'Two', '3');

会转储

array (size=3)
  1 => string 'One' (length=3)
  2 => string 'Two' (length=3)
  3 => string '3' (length=1)


将避免您面临的问题。