[php] 여러 배열 요소를 설정 해제하는 더 나은 방법
여기서 거래는 17 개의 요소가있는 배열이 있다는 것입니다. 특정 시간 동안 필요한 요소를 가져 와서 배열에서 영구적으로 제거하고 싶습니다.
코드는 다음과 같습니다.
$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']);
예, 코드는 추악하며 bash 필요가 없습니다. 어떻게하면 더 좋게 만들 수 있습니까?
답변
array_diff_key를 사용하여 제거
$remove = ['telephone', 'country'];
array_diff_key($post, array_flip($remove));
유지할 키 배열을 제공하려면 array_intersect_key를 사용할 수 있습니다.
답변
함수 extract()
가 수행하려는 작업에 대해 더 나은 도구 인 것처럼 보입니다 (배열에서 모든 키 / 값을 추출하고 로컬 범위의 키와 동일한 이름을 가진 변수에 할당한다고 가정). 콘텐츠를 추출한 후 $post
원하는 다른 항목이 포함되어 있지 않다고 가정 하고 전체를 설정 해제 할 수 있습니다.
그러나 실제로 질문에 답하기 위해 제거하고 반복하려는 키 배열을 만들고 명시 적으로 설정을 해제 할 수 있습니다.
$removeKeys = array('name', 'email');
foreach($removeKeys as $key) {
unset($arr[$key]);
}
… 또는 키가 제거 된 새 배열을 변수로 가리킬 수 있습니다.
$arr = array_diff_key($arr, array_flip($removeKeys));
… 또는 모든 배열 구성원을 unset()
…
unset($arr['name'], $arr['email']);
답변
위의 예보다 더 나은 또 다른 방법이 있습니다. 출처 : http://php.net/manual/en/function.unset.php
전체 배열을 반복하고 모든 키를 설정 해제하는 대신 다음과 같이 한 번만 설정 해제 할 수 있습니다.
예제 어레이 :
$array = array("key1", "key2", "key3");
전체 어레이의 경우 :
unset($array);
고유 키의 경우 :
unset($array["key1"]);
하나의 배열에있는 여러 키의 경우 :
unset($array["key1"], $array["key2"], $array["key3"] ....) and so on.
이것이 당신의 발전에 도움이되기를 바랍니다.
답변
나는이 질문이 오래되었다는 것을 이해하지만 최선의 방법은 이것을하는 것입니다.
$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 */
}
이제 어디서나 $ name, $ email, …을 사용할 수 있습니다.)
주의 : extract ()는 안전하지 않으므로 완전히 의문의 여지가 없습니다!