2012-07-02 3 views
3

이중 레벨 배열이 있습니다. 첫 번째 레벨에는 약 10 개의 인덱스가 있습니다. 여기에는 각각 단어가 들어있는 275 개의 요소 배열이 포함됩니다.array_merge가 예상대로 작동하지 않습니다.

Array 
(
[0] => Array 
    (
    [0] => Suspendisse 
    [1] => Nam. 
    [2] => Amet 
    [3] => amet 
    [4] => urna 
    [5] => condimentum 
    [6] => Vestibulum 
    [7] => sem 
    [8] => at 
    [9] => Curabitur 
    [10] => lorem 
    .... to [275] 
    ) 
[1] => Array 
    (
    ... you get the idea 
    ) 
... 10 elements total 
) 

지금, 상황을 통해, 공간을 차지 추가 된 이미지처럼, 가끔 남은되는 단어의 수를 계산하고 여전히 남아있는 배열을 재분배해야합니다.

나는 아래의 함수를 써서 나머지 배열을 하나의 큰 긴 배열로 만들었습니다. 그 배열을 올바른 비율로 array_chunk 할 수 있습니다. & $ array는 "mother array"에 대한 참조이고, $ memory는 잉여 단어의 배열이며, $ index는 for 루프를 반복하는 곳이며, $ limit는 두 번째 레벨의 "array"길이입니다. 이 경우 275

function redistribute(&$array,$memory,$index,$limit) 
{ 
$ret[] = $array[0]; 
// skip past the current processed items 
for($c=1;$c<$index;$c++) 
    { 
    $ret[] = $array[$c]; 
    } 
// apply current item 
$ret[] = $array[$index]; 

//join the rest into one big array off words; 
$r2=$memory; 
$length = count($array); 
for($c=$index+1;$c<$length;++$c) 
    { 
    array_merge($r2,$array[$c]); 
    print_r($r2); 
    } 
} 

array_merge (arr1, arr2)이 작동하지 않는 문제.

redistribute($splitupchunk,array('test','test2','test3','test4'),$i,275); 

에서 print_r ($ R2)를 실행 단지 $ 배열 [$ C]의 추가 변수없이 시험 번호를 출력한다. 어떻게 해결할 수 있습니까?

답변

24

작동하지 않는 이유를 찾았습니다. array_merge가 반환 대신 참조로 작업했다고 가정했습니다. 라인이 예상대로 그것은 지금 작동

array_merge($r2,$array[$c]); 

$r2 = array_merge($r2,$array[$c]); 

함으로써

.

+1

브릴리언트. 그것에 대한 귀하의 도움에 감사드립니다. – DavidHyogo