2015-06-04 95 views
7

据我所知,在associative arrays,如果没有设置键,它会自动设置。但它似乎没有意义在这种情况下:PHP索引关联数组如何?

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

输出:

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

那么,是 '3'?

+0

你是从哪里得到的?关联数组仅用于设置我们自己的关键字,而不是其默认关键字 –

+0

我从[link](http://php.net/manual/en/function.array.php)获得此信息。它说:“当省略索引时,会自动生成一个整数索引,从0开始。如果索引是一个整数,则下一个生成的索引将是最大整数索引+1。 – Jane

+0

请使用此代码并检查它'$ a = array('1'=>'One','3','3'=>'Two'); 的print_r($ A);' –

回答

4

在用户定义的数组要分配键手动将阵列结构作为

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

这里,我们有两个相同指数和按DOCS其提到最后覆盖第一

语法“index => values”,用逗号分隔,定义索引和值。索引可以是字符串或整数类型。当省略索引时,会自动生成一个整数索引,从0开始。如果索引为整数,则下一个生成的索引将为最大整数索引+ 1.

请注意,当定义两个相同的索引时,覆盖第一个。

为了过滤这种情况下,你可以简单地做一些变化

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

+0

不客气....检查我更新的答案@Jane –

+0

嘿@Uchiha,还有一个问题。在处理数组之前,如何去除没有像上面那样关联的键的值? – Jane

+0

对不起,你可以请你显示你的预期输出。 –

3

在PHP中关键是可选的。如果没有指定,PHP将使用最大的先前使用的整数键

一样的增量,如果: -

$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次,结果是三个

在y我们的情况: -

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

输出是

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

这是因为: -

第一键映射将: - '1' => 'one'

再次

PHP将保持第二值为 '2' => '3'

现在,作为在阵列“2”被分配为“二”,值成为

'2' => 'Two'这意味着它覆盖。

+0

哦,我明白了!谢谢! – Jane

0

@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) 


将避免你所面对的问题。