[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"]);