programing

PHP 배열의 값을 지우기 위해 각 루프에 사용하는 효율성

copysource 2023. 6. 4. 17:54
반응형

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가 느림)

그 이유는 우리가 그것들을 부르기 위해 오버헤드 기능을 건너뛰기 때문입니다.

메서드 및 변수 선언의 PHP 배열 vs [ ]

언급URL : https://stackoverflow.com/questions/10261925/efficiency-of-using-foreach-loops-to-clear-a-php-arrays-values

반응형