2011-11-08 1 views
-2

단지 호기심 다른 모든 어레이들을 병합 PHP,사람마다 다른 서브 어레이를 병합하는 방법을 알고있는 경우

$tmp = array(); 

$tmp[0] = array(false); 
$tmp[1] = array(false); 

$tmp[2] = array(false); 
$tmp[3] = array(false); 

$tmp[4] = array(false); 
$tmp[5] = array(false); 

또는 .... 0 + 1 2 + 3 4 + 5 일명

나는 이렇게 생각하니?

$i=0; $new=array(); 
foreach($tmp as $k=>$v) { 
    $tmp[$k] = $v; 
    if($i=$k-1) { 
    $new[] = $tmp[$i] + $tmp[$i-1]; /* or something ridiculous like that */ 
    } 
    $i++; 
} 
+0

정확하게 편집하고 요점을 정했을 때, 특히 해결되고 승인 된 후에 무엇을 하향 투표 했나요? 어리석은 .... – ehime

답변

1

당신은 매우 간단한 솔루션을 가지고 올 수 array_mergearray_chunk를 사용하고

<?php 

$result = array_chunk($tmp, 2); 

foreach ($result as &$chunk) 
{ 
    $chunk = array_merge($chunk[0], $chunk[1]); 
} 
+1

청크에 두 개 이상의 요소가있는 경우'call_user_func_array ('array_merge', $ chunk)'도 작동합니다. –

+0

오! 더욱 좋다. 의견을 보내 주셔서 감사합니다. – adlawson

+1

비록 이것이 까다로워 보이고 "멋지다"고하더라도 - 나는 프로덕션에 그런 명백한 코드를 쓰지 않을 것입니다. (네, 저에게는 읽기 쉽고 이해하기가 좀 어려워 보입니다) – zerkms

0

여기에는 배열에 짝수 개의 항목이 포함되어 있다고 가정합니다. 그렇지 않은 경우, 또는 당신은, 0 + 1, 1 + 2, + 3 2를 병합 1 $i의 증가를 변경하고 $j = count($tmp) - 1

$tmp = array(); 

$tmp[0] = array(false); 
$tmp[1] = array(false); 

$tmp[2] = array(true); 
$tmp[3] = array(true); 

$new = array(); 
for($i = 0, $j = count($tmp); $i < $j; $i += 2) 
{ 
    $new[] = array_merge($tmp[$i], $tmp[$i+1]); 
} 

$j의 지정을 변경하고자하는 경우 출력

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    bool(false) 
    [1]=> 
    bool(false) 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    bool(true) 
    [1]=> 
    bool(true) 
    } 
} 
+0

[array_walk] (http://php.net/manual/en/function.array-walk.php)에서도이 글을 쓸 수 있습니다. – ssamuel

2
$new = array(); 
for ($i = 0, $cnt = count($tmp); $i < $cnt; $i += 2) { 
    $new[] = $tmp[$i] + $tmp[$i + 1]; 
} 
+0

홀수 개의 항목이있는 배열은 아래에서 설명한대로 "알림 : 정의되지 않은 오프셋 :"및 "치명적 오류 : 지원되지 않는 피연산자 유형"으로 인해 실패합니다. – nickb

+0

@nickb : 실제로, 모든 @ ehime의 작업을 수행 할 목표는 없었지만 그에게 기본을 쓰는 방법에 대한 아이디어를주었습니다. Btw,'$ tmp [$ i]'가 배열이 아니라 객체 일 때 문제가 발생합니다. 문제의 범위를 벗어 났으므로이를 처리하지 못합니다. – zerkms

+0

항상 짝수가 있고이 경우 객체는 항상 문자열 캐스팅을 사용할 수 있습니다. $ mp = (array) $ tmp; 그래서 그것의 non-issue. – ehime