2015-06-04 3 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 ($ а), ' –

ответ

4

В вашем определенном пользователе массива вы присваивающая ключи вручную ваш массив означает, как

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

Здесь мы имеем два одинаковый индекс и согласно DOCS его упоминали, что последний перезаписывает первый

Синтаксис «index => values», разделенный запятыми, определяет индекс и значения. index может иметь тип 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) 

DOCS CHECK PARAMETERS

+0

Добро пожаловать.Проверьте мой обновленный ответ @Jane –

+0

Эй, @ Учиха, еще один вопрос. Как удалить значения, у которых нет ключей, связанных как указано выше, перед обработкой массива? – 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 раза, в результате получается три

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


позволит избежать проблем, стоящие перед вами.

Смежные вопросы