[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 ()는 안전하지 않으므로 완전히 의문의 여지가 없습니다!


답변