2012-03-23 3 views
4

Скажем, у меня есть массив:PHP удалить один элемент из массива

$before = array(1,2,3,3,4,4,4,5) 

Как бы я удалить только один вхождение, например, «3»?

$after = array(1,2,3,4,4,4,5) 

(я не знаю, где в массиве, что число будет)

+1

Если вам нужен конкретный ответ для этого случая, он будет отличаться от общего случая. – hjpotter92

ответ

5

Вы можете использовать различные методы, в зависимости от того, что именно вы пытаетесь сделать:

  • Найдите индекс, используя array_search(), а затем unset() it.
  • Если вы знаете индекс, используйте array_splice(), чтобы заменить его ничем.
  • Используйте array_filter() с пользовательским обратным вызовом.
+1

Например: unset ($ before [array_search (3, $ before)]) ;. Удаляет первое вхождение из 3 в массиве. –

0

Если вы знаете порядок конкретного элемента, который вы хотите удалить, вы можете использовать что-то вроде

unset $before[2] 
1

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); 
+0

@salathe - и я просто работал над более общей версией, которая позволила бы сократить несколько «целей» до одной записи. –

+0

это ваш ответ ... редактируйте, как вам нравится! :-) – salathe

0

Существует несколько способов сделать то, что вы просите. Какой из них вы должны использовать, зависит от контекста его использования, а также от точного результата. Я предпочитаю 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"; 
?> 
Смежные вопросы