Решения:
- Чтобы удалить один элемент, используйте unset () :
unset($array[3]);
unset($array['foo']);
- Чтобы удалить несколько несмежных элементов, также используйте unset () :
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
- Чтобы удалить несколько смежных элементов, используйте array_splice () :
array_splice($array, $offset, $length);
Дополнительные пояснения:
Использование этих функций удаляет все ссылки на эти элементы из PHP. Если вы хотите сохранить ключ в массиве, но с пустым значением, присвойте элементу пустую строку:
$array[3] = $array['foo'] = '';
Помимо синтаксиса, есть логическая разница между использованием unset () и назначением '' для элемента. Первый говорит This doesn't exist anymore,
, а второй говорит This still exists, but its value is the empty string.
Если вы имеете дело с числами, лучше выбрать 0. Таким образом, если компания остановит производство звездочки модели XL1000, она обновит свой инвентарь:
unset($products['XL1000']);
Однако, если в нем временно закончились звездочки XL1000, но в конце этой недели планировалось получить новый груз с завода, это лучше:
$products['XL1000'] = 0;
Если вы unset () элемент, PHP настраивает массив таким образом, чтобы цикл по-прежнему работал правильно. Он не сжимает массив, чтобы заполнить недостающие отверстия. Это то, что мы имеем в виду, когда говорим, что все массивы являются ассоциативными, даже если они кажутся числовыми. Вот пример:
// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1]; // Prints 'bee'
print $animals[2]; // Prints 'cat'
count($animals); // Returns 6
// unset()
unset($animals[1]); // Removes element $animals[1] = 'bee'
print $animals[1]; // Prints '' and throws an E_NOTICE error
print $animals[2]; // Still prints 'cat'
count($animals); // Returns 5, even though $array[5] is 'fox'
// Add a new element
$animals[ ] = 'gnu'; // Add a new element (not Unix)
print $animals[1]; // Prints '', still empty
print $animals[6]; // Prints 'gnu', this is where 'gnu' ended up
count($animals); // Returns 6
// Assign ''
$animals[2] = ''; // Zero out value
print $animals[2]; // Prints ''
count($animals); // Returns 6, count does not decrease
Чтобы сжать массив в плотно заполненный числовой массив, используйте array_values () :
$animals = array_values($animals);
В качестве альтернативы, array_splice () автоматически переиндексирует массивы, чтобы не оставлять дыр:
// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
[0] => ant
[1] => bee
[2] => elk
[3] => fox
)
Это полезно, если вы используете массив в качестве очереди и хотите удалить элементы из очереди, но при этом разрешить произвольный доступ. Чтобы безопасно удалить первый или последний элемент из массива, используйте array_shift () и array_pop () , соответственно.