Как PHP ассоциативные массивы?

Как я знаю, в associative arrays , если ключи не установлены, он будет установлен автоматически. Но в этом случае это не имеет смысла:

 $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 он упоминает, что последний перезаписывает первый

Синтаксис «index => values», разделенный запятыми, определяет индекс и значения. index может иметь тип string или integer. Когда индекс опущен, автоматически генерируется целочисленный индекс, начиная с 0. Если индекс является целым числом, следующий сгенерированный индекс будет самым большим индексом integer + 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 ПРОВЕРЬТЕ ПАРАМЕТРЫ

В 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 раза, в результате получается три

В твоем случае :-

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

Выход

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

это потому что :-

первая ключевая карта будет: – '1' => 'one'

еще раз

php сохранит второе значение как '2' => '3'

Теперь, как в массиве '2', назначается как «Два», значение становится

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


позволит избежать проблем, с которыми вы сталкиваетесь.