2010-11-25 2 views
0

저는 처음 프로그래밍을 시작했을 때 만든 함수를 사용 했었습니다. (또는 그 후 얼마되지 않아) 간단하지만 매우 유용한 작업을 수행했습니다. 부모와 자식을 기반으로 배열을 구성합니다. 예를 들어 데이터베이스에서 무한 깊이의 자식을 가질 수있는 항목의 목록이 있고 시각적으로 html select 요소에서 순서대로 목록을 표시해야하는 경우에 유용 할 것입니다. 각 어린이의 심도 표현 (-).중첩되지 않은 부모 - 자식 배열을 구성하는 데 더 많은 메모리를 덜 사용하는 방법이 필요합니다.

이제는이 작업을 수행하는 기능이 있으며, 내가 입력 한 모든 상황에서 작동하지만 배열을 무수히 복제합니다 ... 지금까지이 기능은 이 함수는 구성해야하는 항목이 수만 개가 될 수있는 위치에서이 함수를 사용하기 시작했습니다. 그래서 나는 여기 누군가가 내가 그것을 최적화하도록 도울 수 있기를 바라고있다.

코드 : http://pastebin.com/knk0Fyd0

답변

1

루프 밖으로 count() 기능을 가져 가라. 그것은 병목입니다. 대신에 :

for ($i=0;$i<count($array);$i++) 

사용이 :

$count=count($array); 
for ($i=0;$i<$count;$i++) 

귀하의 InsertAfter() 기능은 쉽게 PHP의 array_splice() 및/또는 array_slice() 달성 될 수 있었다.

+0

고맙습니다. 상당히 빠른 속도 향상이지만, 저는 궁금합니다. 배열을 여러 번 메모리에로드하거나 PHP를 올바르게 처리 할만큼 똑똑합니까? – Jon

+1

함수 내부에서 배열을 조작하고 있습니다. 함수가 끝나면 PHP의 가비지 컬렉터가 작업을 대신하여 공간을 확보합니다. 큰 기능을 작은 기능으로 분해 할 수 있다면 메모리 소비는 줄어들 것입니다. – stillstanding

+0

좋아, 한꺼번에 고마워 ... 또한 난 그냥 무작위로 생성 된 200 항목의 긴 배열을이 실행하고 2ms 실행하는 데 걸립니다. 속도를 높이는 다른 방법이 있습니까? 또는 배열을 캐시 할 수있는 방법이 있습니까? 캐시 기능이 내장되어 있지만 각 배열에 대한 캐시가 생성되지 않았는지 확인하기 위해 고유 ID를 얻는 방법을 잘 모르겠습니다. md5 (var_dump())? – Jon

관련 문제