2010-04-29 3 views
1

좋아,이 배열 내에서 키를 보존해야하며이 배열에서 첫 번째 요소를 이동하고 싶습니다. 사실 나는 내가 할 때이 배열의 첫 번째 키는 항상 1이 될 것을 알고이 :array_shift 함수 대신

// Sort it by 1st group and 1st layout. 
ksort($disabled_sections); 
    foreach($disabled_sections as &$grouplayout) 
     ksort($grouplayout); 

기본적으로 차라리 여기서 키 = 1 그리고이 배열을 잡기 위해 그것을 ksort 할 필요가 없습니다 것입니다, 솔직히, 나는 array_shift의 큰 팬이 아니며 단지 긴 IMO를 필요로합니다. 다른 방법이 있습니까? 아마도 $ disabled_sections [1]이 foreach를 수행하고 정렬하지 않고도 발견되는 전체 배열을 추출하는 방법이고, array_shift입니다. 나는 다른 배열에 $ disabled [1]을 추가하고이 배열에서 모두 제거하려고합니다. 두 배열 키를 그대로 유지합니다. 기술적으로이 작업을 수행하는 것이 좋습니다.

$array = array(); 
$array = $disabled_sections[1]; 

하지만 $ disabled_sections에서 제거해야합니다. 이 접근법과 같은 것을 사용할 수 있습니까?

$array = array(); 
$array = $disabled_sections[1]; 
$disabled_sections -= $disabled_sections[1]; 

위와 같은 것이 가능합니까 ??

감사합니다.

unset(disabled_sections[1]); 

을하지만 그것은 단지 변화의 자신의 버전을 구현하는 것 : 그 방식에는 -= 운영자가 없지만

+0

이 배열의 크기는 얼마입니까? 전반적인 품목 번호? –

답변

2

, 당신은 배열에서 해당 요소를 제거하기 위해 해제 할 수 있습니다. 어떤 상황에서 'array_shift()'이 '느린'상태인지와 느린 상태를 테스트하는 방법이 무엇인지 궁금합니다.

숫자 배열은 기본적으로 숫자로 정렬됩니다. 즉, ksort는 필요하지 않습니다. 당신이 배열에서 요소를 끌어 순서에 대해 우려하지 않는 경우 어쩌면 당신은

while($array = array_shift($group_of_arrays)) { 

    // ... do stuff 
} 

같은 것을 시도해야한다, 당신은 대신 "array_shift"의 "array_pop"를 사용할 수 있습니다. "array_pop"은 배열 끝에서 요소를 가져 오므로 다시 색인 할 필요가 없으므로 성능이 크게 향상됩니다. 약 80,000 항목의 배열을 테스트 할 때 "array_pop"을 사용하여 처리 시간이 약 90 % 감소합니다.

+0

고마워, 왜 내가 그걸 생각하지 않았는지 모르겠다. 롤. 여기에있는 array_shift에 대한 의견을 읽었습니다 : http://php.net/manual/en/function.array-shift.php, 그리고 많은 사람들은 너무 느리다는 것을 말하고 있습니다. 나는 그것이 내 끝에서 느리게되기를 원하지 않는다. 다시 한번 감사드립니다 :) – SoLoGHoST

+0

좋아, 나는'array_unshift'가 나를 도와 줄 것이라고 생각하지 않는다. array_unshift가 아니라'array_shift'에 대해서 말하고 있습니다. – SoLoGHoST

+0

'array_unshift'는 오타였습니다 :) array_shift는 매우 큰 배열에 대해서만 '느린'것이기 때문에 당신이 그것을 사용하고있는 상황에서 물었습니다. 500 개의 항목이있는 배열 또는 500,000 개의 항목이있는 배열입니다. – Erik

4

이에 대한 승인 된 대답이 있음에도 불구하고; 경우 다른 사람이 가로 질러 실수를 한단다에, 방법이 (주요 관계없이 , 또는 키의 순서) 배열의 첫 번째 요소를 설정 해제하는 array_shift를 사용하지 않고는 다음과 같습니다

reset($array); // sets internal array pointer to start 
unset($array[key($array)]); // key() returns key of current array element 

내가 이야 있지만

$element = reset($array); // also returns element 
unset($array[key($array)]); 
return $element; 

그냥 완성을 위하여 : 매우 검색 값의 추가 수익을 제외하고,array_shift 내부적 무엇의 확신 (그래서 나는 이것에 더 성능 향상이 없을 것입니다 상상).

+3

숫자 배열의 경우 PLUS가 전체 배열의 번호를 다시 매기므로 array_shift가하는 일이 무엇인지 알 수 없다. 큰 배열에서는 느려질 수있다. – Erik

+0

나는 연관 배열을 가능한 한 독점적으로 사용하는 경향이 있으므로 잘 모른다. : 3 좋은 정보! – pinkgothic

관련 문제