[php] PHP에서 배열에서 요소 삭제

foreach ($array)더 이상 해당 요소를 포함하지 않도록 PHP를 사용하여 배열에서 요소를 삭제하는 쉬운 방법이 있습니까?

나는 그것을 설정하면 그렇게 될 null것이라고 생각 했지만 분명히 작동하지 않습니다.



답변

배열 요소를 삭제하는 방법에는 여러 가지가 있으며, 일부는 다른 것보다 특정 작업에 더 유용합니다.

하나의 배열 요소 삭제

하나의 배열 요소 만 삭제하려는 경우 unset()또는 대신 사용할 수 있습니다 \array_splice().

또한 값이 있고 요소를 삭제할 키를 모르는 경우 키 \array_search()를 얻는 데 사용할 수 있습니다 .

unset()

unset()배열 키 를 사용 하면 변경 / 재 인덱싱되지 않습니다. 키를 다시 인덱싱하려면 \array_values()이후에 사용할 수있는 키를 unset()모두 0부터 시작하는 숫자 열거 키로 변환합니다.

암호

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    unset($array[1]);
                //↑ Key which you want to delete

?>

산출

[
    [0] => a
    [2] => c
]

\array_splice() 방법

\array_splice()키 를 사용 하면 자동으로 색인이 다시 생성되지만 \array_values()모든 키를 숫자 키로 변환하는 것과 달리 연관 키는 변경되지 않습니다 .

또한 \array_splice()키가 아닌 오프셋이 필요합니다! 두 번째 매개 변수로

암호

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \array_splice($array, 1, 1);
                        //↑ Offset which you want to delete

?>

산출

[
    [0] => a
    [1] => c
]

array_splice()unset()참조로 배열 을 가져 오는 것과 동일 하며 이는 해당 함수의 반환 값을 배열에 다시 할당하지 않으려는 것을 의미합니다.

여러 배열 요소 삭제

여러 배열 요소를 삭제하고 호출 unset()하거나 \array_splice()여러 번 원하지 않는 경우 함수를 사용 \array_diff()하거나 \array_diff_key()삭제할 요소의 값 또는 키를 알고 있는지 여부에 따라 기능을 사용할 수 있습니다 .

\array_diff() 방법

삭제하려는 배열 요소의 값을 알고 있으면을 사용할 수 있습니다 \array_diff(). 이전과 마찬가지로 unset()배열의 키를 변경하거나 다시 색인화하지 않습니다.

암호

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff($array, ["a", "c"]);
                               //└────────┘→ Array values which you want to delete

?>

산출

[
    [1] => b
]

\array_diff_key() 방법

삭제하려는 요소의 키를 알고 있으면을 사용하려고합니다 \array_diff_key(). 여기서 키가 값이 아닌 두 번째 매개 변수의 키로 전달되는지 확인해야합니다. 그렇지 않으면 배열을로 뒤집어 야합니다 \array_flip(). 또한 여기서 키는 변경 / 재 인덱싱되지 않습니다.

암호

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                    //↑           ↑ Array keys which you want to delete
?>

산출

[
    [1] => b
]

또한 동일한 값을 가진 여러 요소 를 사용 unset()하거나 \array_splice()삭제 하려는 경우 \array_keys()특정 값의 모든 키를 얻은 다음 모든 요소를 ​​삭제하는 데 사용할 수 있습니다.


답변

주목해야한다 unset()문자열 인덱스 (해시 테이블로 배열)을 사용할 때 무엇을 기대할 인의 손길이 닿지 않은 인덱스를 유지하지만, 정수 인덱스 배열을 다룰 때 매우 놀라운 일이 될 수있다 :

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

그래서 array_splice()당신은 당신의 정수 키를 정상화하려는 경우 사용할 수 있습니다. 또 다른 옵션은 array_values()after를 사용하고 있습니다 unset().

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */


답변

  // Our initial array
  $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
  print_r($arr);

  // Remove the elements who's values are yellow or red
  $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);

위 코드의 결과입니다.

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

이제 array_values ​​()는 숫자 형 배열을 멋지게 다시 색인화하지만 배열에서 모든 키 문자열을 제거하고 숫자로 대체합니다. 키 이름 (문자열)을 유지하거나 모든 키가 숫자 인 경우 배열을 다시 인덱싱해야하는 경우 array_merge ()를 사용하십시오.

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

출력

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)


답변

$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}


답변

unset($array[$index]);


답변

모든 값이 고유 한 숫자 인덱스 배열이 있거나 고유하지 않지만 특정 값의 모든 인스턴스를 제거하려는 경우 array_diff ()를 사용하여 다음과 같이 일치하는 요소를 제거하면됩니다.

$my_array = array_diff($my_array, array('Value_to_remove'));

예를 들면 다음과 같습니다.

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

다음이 표시됩니다.

4
3

이 예에서 값이 ‘Charles’인 요소는 초기 배열에 대해 크기 4를보고하고 제거 후 3을보고하는 sizeof () 호출로 확인할 수있는대로 제거됩니다.


답변

또한 명명 된 요소의 경우 :

unset($array["elementName"]);