Скажем, у меня есть массив:PHP удалить один элемент из массива
$before = array(1,2,3,3,4,4,4,5)
Как бы я удалить только один вхождение, например, «3»?
$after = array(1,2,3,4,4,4,5)
(я не знаю, где в массиве, что число будет)
Скажем, у меня есть массив:PHP удалить один элемент из массива
$before = array(1,2,3,3,4,4,4,5)
Как бы я удалить только один вхождение, например, «3»?
$after = array(1,2,3,4,4,4,5)
(я не знаю, где в массиве, что число будет)
Вы можете использовать различные методы, в зависимости от того, что именно вы пытаетесь сделать:
array_search()
, а затем unset()
it.array_splice()
, чтобы заменить его ничем.array_filter()
с пользовательским обратным вызовом.Например: unset ($ before [array_search (3, $ before)]) ;. Удаляет первое вхождение из 3 в массиве. –
Это функциональность, которую вы ищете?
Если вы знаете порядок конкретного элемента, который вы хотите удалить, вы можете использовать что-то вроде
unset $before[2]
Generic рутины, просто заполнить массив $ reduceValues со значениями, которые вы хотите, сводящихся к одиночкам ,
$before = array(1,2,2,2,3,3,4,4,4,5,5);
$reduceValues = array(3,5);
$toReduce = array_fill_keys($reduceValues,TRUE);
$after = array_filter($before,
function($data) use ($reduceValues,&$toReduce) {
if (in_array($data,$reduceValues)) {
if ($toReduce[$data]) {
$toReduce[$data] = FALSE;
return TRUE;
}
return FALSE;
}
return TRUE;
}
);
var_dump($after);
@salathe - и я просто работал над более общей версией, которая позволила бы сократить несколько «целей» до одной записи. –
это ваш ответ ... редактируйте, как вам нравится! :-) – salathe
Существует несколько способов сделать то, что вы просите. Какой из них вы должны использовать, зависит от контекста его использования, а также от точного результата. Я предпочитаю array_splice(), потому что он поддерживает нумерацию массивов. Если вам нужен самый простой способ, я предлагаю unset(). Если вы ищете способ устранить обманы, используйте array_unique(). С последними двумя, если вам нужно перенумеровать их назад, как они были, используйте array_values(). Если вы не знаете индекс значения, который необходимо удалить, вы можете использовать один из указанных выше в сочетании с array_search(). Если вам нужен более продвинутый фильтр, используйте array_filter().
<?php
header('Content-Type: text/plain');
$original = array(1,2,3,3,4,4,4,5);
echo "ORIGINAL:\n";
print_r($original);
echo "\n\n";
echo "Using array_splice():\n";
$new = $original;
array_splice($new, 3, 1);
print_r($new);
echo "\n\n";
echo "Using array_unique() to remove dupes:\n";
$new = array_unique($original);
$new = array_values($new);
print_r($new);
echo "\n\n";
echo "Using unset:\n";
$new = $original;
unset($new[3]);
$new = array_values($new);
print_r($new);
echo "\n\n";
echo "Using array_search & unset:\n";
$new = $original;
unset($new[array_search('3', $new)]);
$new = array_values($new);
print_r($new);
echo "\n\n";
?>
Если вам нужен конкретный ответ для этого случая, он будет отличаться от общего случая. – hjpotter92