2011-08-21 3 views
0

나는 제목으로 너를 날려 버렸다. 그러나 여기에 내가 정확히 필요한 무엇 : 내가 원하는배열의 "type array"요소에있는 데이터를 새 배열로 병합

array(
'0' => array('the','data','i'), 
'1' => array('need', 'is', 'this'), 
'2' => array('complete', 'sentence') 
); 

가 될 :

array(
'the','data','i','need','is','this','complete','sentence' 
); 

임의의 새로운 기능 :의

  1. 나는이 같은 배열을 하위 배열 요소의 요소

  2. 하위 배열 요소 수입니다.
+1

가능성있는 속는 : http://stackoverflow.com/questions/526556/how-to-flatten -a-multi-dimensional-array-to-simple-one-in-php –

+0

그 해결책은 10k 개 요소 (전체)를 처리하는 것이 좋을까요? – kapeels

+0

좋은 질문, @KPL. 이 솔루션은 배열이 임의의 깊이로 중첩되는 일반적인 경우를 고려합니다. 최상위 수준에서만 병합에 관심이 있다면 재귀를 사용하지 않고보다 효율적으로 무언가를 작성할 수 있습니다. –

답변

2

당신이 제기 한 문제는 재귀 적으로 단순화되는 일반적인 것으로 보이지 않으므로 다른 SO 질문이 일반적인 경우를 다루지 만 여기에는 간단한 해결책을 제시 할 가치가 있습니다.

당신이 필요로

call_user_func_array("array_merge", $a); 

완전한 스크립트에서 그것을 볼 수 있습니다 :

<?php 
$a = array(
    array('the',' data', 'i'), 
    array('need', 'is', 'this'), 
    array('complete', 'sentence') 
); 

echo var_dump($a); 
echo "<br/><br/><br/>"; 
$b = call_user_func_array("array_merge", $a); 
echo var_dump($b); 
?> 

이것은 추가 배열로 결과를 축적하고 비효율적 일 수 있습니다. 공간을 미리 할당 할 수있는 SplFixedArray을 확인할 수 있습니다. 그런 다음 원본 배열의 구성 배열을 가로 지르고 결과를로드합니다. 여기 SplFixedArray에 대해 설명 블로그 게시물이며, 타이밍 결과를 포함 : 여기

http://www.johnciacia.com/2011/02/01/array-vs-splfixedarray/가 자세한 버전입니다 :

<?php 
$a = array(
    array('the','data','i'), 
    array('need', 'is', 'this'), 
    array('complete', 'sentence') 
); 

$size = 0; 
foreach ($a as $subarray) { 
    $size += count($subarray); 
} 

$result = new SplFixedArray($size); 
# If you do not have SPL, just use $result = Array(); and write to a high index first (probably) 

$i = 0; 
foreach ($a as $subarray) { 
    foreach ($subarray as $value) { 
     $result[$i++] = $value; 
    } 
} 

echo var_dump($result); 
?> 
+0

그러나'array_values'도 같은 목적으로 사용되지 않습니까? – kapeels

+0

['array_values'] (http://php.net/manual/en/function.array-values.php) 함수는 키를 무시하고 숫자로 인덱스 된 배열을 생성합니다. 평평하게하는 것이 어떻게 도움이되는지는 모르겠지만 사용할 수 없다는 것을 의미하지는 않습니다. –

관련 문제