2011-10-25 9 views
49

Porozumiewanie się tutaj polega na tym, że mam tablicę z 17 elementami. Chcę uzyskać potrzebne elementy przez pewien czas i usunąć je na stałe z tablicy.Lepszy sposób na pozbawianie się wielu elementów tablicy

Oto kod:

$name = $post['name']; 
$email = $post['email']; 
$address = $post['address']; 
$telephone = $post['telephone']; 
$country = $post['country']; 

unset($post['name']); 
unset($post['email']); 
unset($post['address']); 
unset($post['telephone']); 
unset($post['country']); 

Tak kod jest brzydki, nie trzeba walnąć. Jak sprawić, żeby wyglądało to lepiej?

Odpowiedz

67

Wygląda na to, że funkcja extract() byłaby lepszym narzędziem do tego, co próbujesz zrobić (zakładając, że wypakowuje wszystkie klucze/wartości z tablicy i przypisuje je do zmiennych o takich samych nazwach jak klucze w zakresie lokalnym). Po wyodrębnieniu zawartości możesz anulować ustawienie całego $post, zakładając, że nie zawiera ono niczego, co chcesz.

Jednak, aby właściwie odpowiedzieć na to pytanie, można utworzyć tablicę klawiszy, które chcesz usunąć i pętli, wyraźnie je wyłączające ...

$removeKeys = array('name', 'email'); 

foreach($removeKeys as $key) { 
    unset($arr[$key]); 
} 

... czy można wskazać zmienną do nowej tablicy, która ma klucze usuwane ...

$arr = array_diff_key($arr, array_flip($removeKeys)); 

... lub przekazać wszystkim członkom tablicę unset() ...

unset($arr['name'], $arr['email']); 
+4

[array_diff_key()] (http: // php.net/manual/en/function.array-diff-key.php) jest dobrym rozwiązaniem. Pomyślałem, że dodam, że możesz użyć [array_intersect_key()] (http://php.net/manual/en/function.array-intersect-key.php), aby wykonać odwrotną stronę, zachowaj tylko niektóre elementy. – batfastad

+1

Jestem z bbradley - array_diff_key jest świetnym rozwiązaniem – Michael

2

rozumiem to pytanie jest stary, ale myślę, że to optymalny sposób może być to zrobić:

$vars = array('name', 'email', 'address', 'phone'); /* needed variables */ 
foreach ($vars as $var) { 
    ${$var} = $_POST[$var]; /* create variable on-the-fly */ 
    unset($_POST[$var]); /* unset variable after use */ 
} 

Teraz można użyć $ name, $ e-mail z dowolnego miejsca ...;)

NB: extract() nie jest bezpieczny, więc jest całkowicie wykluczony!

32

Istnieje inny sposób, który jest lepszy niż powyższe przykłady. Źródło: http://php.net/manual/en/function.unset.php

Zamiast pętli dokładna całą tablicę i wyłączania wszystkich przycisków, można po prostu wyłączony kiedyś tak:

Przykład Array:

$array = array("key1", "key2", "key3"); 

Dla całej tablicy:

unset($array); 

unikalnych kluczy:

unset($array["key1"]); 

Dla wielu kluczy w jednej tablicy:

unset($array["key1"], $array["key2"], $array["key3"] ....) and so on. 

Mam nadzieję, że to pomaga w rozwoju.

40

Zastosowanie array_diff_key usunąć

$remove = ['telephone', 'country']; 

array_diff_key($post, array_flip($remove)); 

Można użyć array_intersect_key jeśli chciał dostarczyć tablicę klawiszy, aby zachować.

+3

Nie rozumiem, dlaczego ta metoda nie jest akceptowana jako wygrywająca odpowiedź, ponieważ działa jako urok! –

+0

Genialny! Niezłe. Podoba mi się to, zamiast zapętlać tablicę i rozbrajać elementy. – lifo

+0

Inteligentne rozwiązanie !! – MAZux

Powiązane problemy