Chodzi o to, że mam tablicę z 17 elementami. Chcę pobrać potrzebne elementy na określony czas i trwale usunąć je z 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 walić. Jak mam to poprawić?
Wygląda na to, że funkcja
extract()
byłaby lepszym narzędziem do tego, co próbujesz zrobić (zakładając, że wyodrębnia 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 rozbroić całość$post
, zakładając, że nie zawiera ona niczego innego, czego chciałeś.Jednak, aby właściwie odpowiedzieć na swoje pytanie, możesz utworzyć tablicę kluczy, które chcesz usunąć i przez które pętli, jawnie je anulować ...
$removeKeys = array('name', 'email'); foreach($removeKeys as $key) { unset($arr[$key]); }
... lub możesz wskazać zmienną nową tablicę, która ma usunięte klucze ...
$arr = array_diff_key($arr, array_flip($removeKeys));
... lub przekaż wszystkie składowe tablicy do
unset()
...unset($arr['name'], $arr['email']);
źródło
Jest inny sposób, który jest lepszy od powyższych przykładów. Źródło: http://php.net/manual/en/function.unset.php
Zamiast wykonywać pętlę w całej tablicy i usuwać wszystkie jej klucze, możesz po prostu ją raz usunąć:
Przykładowa tablica:
$array = array("key1", "key2", "key3");
Dla całej tablicy:
unset($array);
Unikalne klucze:
unset($array["key1"]);
W przypadku wielu kluczy w jednej tablicy:
unset($array["key1"], $array["key2"], $array["key3"] ....) and so on.
Mam nadzieję, że pomoże Ci to w rozwoju.
źródło
Rozumiem, że to pytanie jest stare, ale myślę, że optymalnym sposobem może być zrobienie tego:
$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żesz używać $ name, $ email, ... z dowolnego miejsca;)
Uwaga: extract () nie jest bezpieczne, więc nie ma o tym mowy!
źródło