IT박스

여러 배열 요소를 설정 해제하는 더 나은 방법

itboxs 2020. 11. 3. 07:52
반응형

여러 배열 요소를 설정 해제하는 더 나은 방법


여기서 거래는 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 필요가 없습니다. 어떻게하면 더 좋게 만들 수 있습니까?


함수 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']);

array_diff_key를 사용하여 제거

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

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

유지할 키 배열을 제공하려면 array_intersect_key를 사용할 수 있습니다.


위의 예보다 더 나은 또 다른 방법이 있습니다. 출처 : 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 ()는 안전하지 않으므로 완전히 의문의 여지가 없습니다!

참고URL : https://stackoverflow.com/questions/7884991/better-way-to-unset-multiple-array-elements

반응형