PHP 배열의 값을 지우기 위해 각 루프에 사용하는 효율성
배열의 모든 값을 지우는 데 어떤 것이 더 효율적입니까?첫 번째 예에서는 두 번째 예제의 루프에서 매번 해당 기능을 사용해야 합니다.
foreach ($array as $i => $value) {
unset($array[$i]);
}
아니면 이거.
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
사용안을 않습니다.unset()
변수가 삭제되기 때문입니다.
잭이 아래 댓글에서 말한 것처럼 당신은 단순히 그것을 다시 인스턴스화할 수 있습니다.
$foo = array(); // $foo is still here
만약 당신이 더 강력한 것을 원한다면, 그것은 또한 기호 테이블에서 $foo를 지울 것이기 때문에, 당신이 나중에 배열이 필요하다면, 그것을 다시 인스턴스화하기만 하면 됩니다.
unset($foo); // $foo is gone
$foo = array(); // $foo is here again
만약 우리가 매우 큰 테이블에 대해 이야기하고 있다면 저는 아마 추천할 것입니다.
$foo = null;
unset($foo);
기억이 좀 더 잘 지워질 것이기 때문입니다.그러나 해당 동작(GC)은 매우 일정하지 않으며 PHP 버전에 따라 변경될 수 있습니다.구조를 다시 인스턴스화하는 것은 구조를 비우는 것과 같지 않습니다.
변수를 빈 배열로 재설정하려는 경우 다음과 같이 간단히 다시 초기화할 수 있습니다.
$foo = array();
이렇게 하면 해당 항목에 대한 참조가 유지됩니다.
$foo = array(1,2,3);
$bar = &$foo;
// ...
$foo = array(); // clear array
var_dump($bar); // array(0) { } -- bar was cleared too!
참조를 끊으려면 먼저 설정을 해제합니다.
$foo = array(1,2,3);
$bar = &$foo;
// ...
unset($foo); // break references
$foo = array(); // re-initialize to empty array
var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged
원래 배열의 참조가 필요하지 않는 한 변수 설정을 해제하는 것이 좋습니다!
내 말의 의미를 분명히 하기 위해,배열의 참조를 사용하는 함수가 있는 경우, 예를 들어 다음과 같은 정렬 함수가 있습니다.
function special_sort_my_array(&$array)
{
$temporary_list = create_assoziative_special_list_out_of_array($array);
sort_my_list($temporary_list);
unset($array);
foreach($temporary_list as $k => $v)
{
$array[$k] = $v;
}
}
작동하지 않습니다!해, 기조심해요.unset
는 " " " 입니다.$array
다시 생성되어 올바르게 채워지지만 함수 외부에서 값에 액세스할 수 없습니다.
그래서 만약 당신이 추천서를 가지고 있다면, 당신은 사용할 필요가 있습니다.$array = array()
에 unset
비록 그것이 덜 깨끗하고 이해하기 쉽지만.
배열이 연관성이 있다면 첫 번째라고 할 수 있습니다.그렇지 않은 경우 다음을 사용합니다.for
슬롯:슬라이드:
for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }
가능한 경우에도, 사용
$array = array();
배열을 빈 배열로 재설정하는 것이 좋습니다.
충분하지 않나요?
unset($array);
어때는 요?$array_name = array();
?
배열을 비우고 참조를 유지하는 데 사용합니다.
array_splice($myArray, 0);
나는 배열을 지우기 위해 unset()을 사용했지만 unset()이 배열을 null로 만들 것이라는 것을 깨닫게 되었고, 따라서 예를 들어 배열을 다시 정의해야 합니다.
<?php
$arr = array();
array_push($arr , "foo");
unset($arr); // this will set the array to null hence you need the line below or redeclaring it.
$arr = array();
// do what ever you want here
?>
단순하고 경제적인 방법(사용할 수 있는 표지판이 적음)...
$array = [];
우리는 php 매뉴얼로 읽을 수 있습니다.
PHP 5.4부터는 array()를 []로 대체하는 짧은 array 구문도 사용할 수 있습니다.
저는 이 질문이 정말 오래된 것으로 알고 있습니다. 하지만 그 문제에 대해 저는 배열의 모든 값을 설정 해제하는 재귀 함수를 작성했습니다.지정된 배열의 값도 배열일 수 있으므로 재귀적입니다.그래서 저는 효과가 있습니다.
function empty_array(& $complete_array) {
foreach($complete_array as $ckey => $cvalue)
{
if (!is_array($cvalue)) {
$complete_array[$ckey] = "";
} else {
empty_array( $complete_array[$ckey]);
}
}
return $complete_array;
}
따라서 모든 키와 하위 배열을 사용하는 배열을 얻을 수 있지만 값은 비어 있습니다.
설정 해제 기능은 쓰레기 수거기가 점심 시간을 갖지 않은 상태에서 회진을 할 때 유용합니다.
그러나 unset 함수는 단순히 데이터에 대한 변수 참조를 파괴하고, 데이터는 여전히 메모리에 존재하며, PHP는 메모리에 대한 포인터가 더 이상 없음에도 불구하고 메모리가 사용 중인 것으로 봅니다.
솔루션:할당null
최소한 가비지 수집기가 데이터를 확보할 때까지 데이터를 삭제하기 위해 변수로 이동합니다.
$var = null;
그런 다음 비슷한 방식으로 설정을 해제합니다!
unset($var);
그 질문은 게시물에 의해 제대로 답변되지 않았습니다.키를 유지하고 값을 지우는 것이 질문의 초점입니다.
foreach($resultMasterCleaned['header'] as $ekey => $eval) {
$resultMasterCleaned[$key][$eval] = "";
}
CSV 값을 보유한 2차원 어레이의 경우와 마찬가지로 특정 행을 비워 둡니다.통과하는 것이 유일한 방법인 것 같습니다.
[]은(는) 어레이 $array[] = $newElement 다음 array_syslog 어레이, $newElement와 유사한 어레이보다 거의 30% 빠름(단일 또는 2개의 새로운 요소에 대해서만 array_syslog가 느림)
그 이유는 우리가 그것들을 부르기 위해 오버헤드 기능을 건너뛰기 때문입니다.
언급URL : https://stackoverflow.com/questions/10261925/efficiency-of-using-foreach-loops-to-clear-a-php-arrays-values
'programing' 카테고리의 다른 글
postgresql 날짜 시간에 일 수를 추가하는 방법 (0) | 2023.06.04 |
---|---|
배치 파일을 윈도우즈 서비스로 실행 (0) | 2023.06.04 |
이제 iPhone에서 MonoTouch가 금지됩니까? (0) | 2023.06.04 |
단일 마이그레이션 파일 실행 (0) | 2023.06.04 |
Android:텍스트 편집을 강제로 수행하여 포커스를 제거하시겠습니까? (0) | 2023.06.04 |