Как я знаю, в 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)