PHP如何索引关联数组?

PHP如何索引关联数组?,php,associative-array,Php,Associative Array,如我所知,在关联数组中,如果未设置关键点,它将自动设置。但在这种情况下似乎没有意义: $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] =>

如我所知,在
关联数组中
,如果未设置关键点,它将自动设置。但在这种情况下似乎没有意义:

$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
这里我们有两个相同的索引,根据上面提到的,最后一个覆盖第一个

语法“index=>values”,用逗号分隔,定义索引和值。索引的类型可以是string或integer。省略索引时,将自动生成从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)

在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,结果为3

就你而言:-

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

Array
(
    [1] => One
    [2] => Two
)
这是因为:-

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

再次

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

现在,由于数组“2”被指定为“2”,所以值变为

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

是正确的,正如该答案的一个包含,如果要避免此问题,请将数组的成员(没有指定键)保留在最后一个位置


将倾倒

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

最后用未定义的键保留成员

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

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


将避免您面临的问题。

从何处获得此信息?关联数组仅用于设置我们自己的键,而不是默认键。我从中获得此信息。它说:“当省略索引时,将自动生成一个整数索引,从0开始。如果索引是整数,则下一个生成的索引将是最大的整数索引+1”。请使用此代码并检查它
$a=array('1'=>'One','3','3'=>'Two');印刷费($a)输出将是
数组([1]=>1[2]=>3[3]=>2)
你的作品,但我只想知道为什么我的案例不在我想过滤这个案例的情况下嘿@Uchiha,还有一个问题。在处理数组之前,如何删除没有像上面那样关联键的值?很抱歉,无法获取。请显示预期的输出。我需要获取键和值:
foreach($a as$b=>$c){printf(“%s=%s
”,$b,$c);}
但不是php自动插入的键。所以我想在
foreach
循环之前清理数组
$a
。这里也会有键和值
foreach($a as$key=>$value){echo“{$key}=>{$value}”;}
。只有当数组不包含值时,才能使用
array\u filter($array)
函数清理数组。我想你误解了我的问题。我的意思是获取已设置关键点的值。例如,我想在处理$a之前从$a中删除'3'。