2012-03-23 21 views
4

Sagen wir, ich habe ein Array:php entfernen ein Element aus dem Array

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

Wie würde ich nur ein Vorkommen von zB entfernen ‚3‘?

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

(ich weiß nicht, wo in der Matrix wird diese Zahl sein)

+1

Wenn Sie eine spezifische Antwort für diesen Fall benötigen, wird es anders sein als der allgemeine Fall. – hjpotter92

Antwort

5

Sie eine Vielzahl von Methoden verwenden kann, je nachdem, was genau zu tun, Sie versuchen:

  • Finden Sie den Index mit array_search() und dann unset() es.
  • Wenn Sie den Index kennen, verwenden Sie array_splice(), um ihn durch nichts zu ersetzen.
  • Verwenden Sie array_filter() mit einem benutzerdefinierten Rückruf.
+1

Zum Beispiel: unset ($ vor [array_search (3, $ vorher)]). Entfernt das erste Vorkommen von 3 im Array. –

0

Wenn Sie wissen, die Reihenfolge bestimmter Artikel, den Sie entfernen möchten, können Sie so etwas wie

unset $before[2] 
1

Allgemein Routine, nur bevölkern die $ reduceValues ​​Array mit den Werten, die Sie wollen zu reduzieren, um Singletons verwenden .

$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 - und ich habe gerade an einer allgemeineren Version gearbeitet, bei der mehrere "Ziele" auf einen einzigen Eintrag reduziert werden können. –

+0

es ist deine Antwort ... bearbeiten, wie du willst! :-) – salathe

0

Es gibt mehrere Möglichkeiten zu tun, was Sie fragen. Welche Sie verwenden sollten, hängt vom Kontext der Verwendung sowie von dem gewünschten Ergebnis ab. Ich bevorzuge array_splice(), weil es die Array-Nummerierung beibehält. Wenn Sie die einfachste Methode wünschen, empfehle ich unset(). Wenn Sie nach einer Möglichkeit suchen, die Duplikate zu eliminieren, verwenden Sie array_unique(). Bei den letzten beiden, wenn Sie sie wieder so umnumerieren müssen, wie sie waren, verwenden Sie array_values(). Wenn Sie den Index des Werts, den Sie entfernen müssen, nicht kennen, können Sie eines der oben genannten in Verbindung mit array_search() verwenden. Wenn Sie einen fortgeschritteneren Filter benötigen, verwenden Sie 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"; 
?> 
Verwandte Themen