2013-05-14 4 views
1

아래와 같이 두 개의 배열이 있습니다. 마침내 세 번째 배열에 표시된 구조를 얻을 수 있도록 배열의 내용을 병합해야합니다. array_merge를 확인했지만 이것이 가능하다는 것을 알 수 없습니다. 어떤 도움을 주셔서 감사합니다. 감사.두 번째 수준에서 배열 병합

array(
    (int) 0 => array(
     'gross_value' => '100', 
     'quantity' => '1' 
    ), 
    (int) 1 => array(
     'gross_value' => '200', 
     'quantity' => '1' 
    ) 
) 

array(
(int) 0 => array(
    'item_title_id' => '1', 
    'order_id' => '4' 
), 
(int) 1 => array(
    'item_title_id' => '2', 
    'order_id' => '4' 
) 
) 

나는이

array(
(int) 0 => array(
    'gross_value' => '100', 
    'quantity' => '1', 
    'item_title_id' => '1', 
    'order_id' => 4 
), 
(int) 1 => array(
    'gross_value' => '200', 
    'quantity' => '1', 
    'item_title_id' => '2', 
    'order_id' => 4 
) 

같은 병합 된 배열)

답변

2

사용 array_merge_recursive :

변환 문자열의 모든 숫자 키,

$result = array_merge_recursive($ar1, $ar2); 
print_r($result); 

live demo here

+0

감사합니다. 모든 사람의 해결책이 한 가지 방법이든 아니든 완벽한 솔루션입니다. – aeonsleo

+0

@Abhishek : 환영합니다 :). Think Hatke .. – Roopendra

0

내가 아마 배열을 반복하고 수동으로 병합 할 수 있습니다.

$result = array(); 
foreach ($array1 as $key => $item) 
{ 
    $result[$key] = array_merge($array1[$key], $array2[$key]); 
} 

최상위 배열에 엄격하게 일치하는 키가없는 경우 문제가 발생합니다. 당신이 $ 배열 1과 $ array2는있는 경우

0

,이 시도 :

foreach($array1 as $key1=>$innerArray){ 
    $array1[$key1]['item_title_id'] = $array2[$key1]['item_title_id']; 
    $array1[$key1]['order_id'] = $array2[$key1]['order_id']; 
} 
1

방법 :

$arr1 = array(
    0 => array(
     'gross_value' => '100', 
     'quantity' => '1' 
    ), 
    1 => array(
     'gross_value' => '200', 
     'quantity' => '1' 
    ) 
); 
$arr2 = array(
    0 => array(
     'item_title_id' => '1', 
     'order_id' => '4' 
    ), 
    1 => array(
     'item_title_id' => '2', 
     'order_id' => '4' 
    ) 
); 
$arr = array(); 
foreach($arr1 as $k => $v) { 
    array_push($arr, array_merge($v, $arr2[$k])); 
} 
print_r($arr); 

출력 :

Array 
(
    [0] => Array 
     (
      [gross_value] => 100 
      [quantity] => 1 
      [item_title_id] => 1 
      [order_id] => 4 
     ) 

    [1] => Array 
     (
      [gross_value] => 200 
      [quantity] => 1 
      [item_title_id] => 2 
      [order_id] => 4 
     ) 

) 

array_merge

에서보세요
0

병합 재귀 같은 것들에 대한 문제를 참조 (연관 배열되어 있는지 확인이)가되면 모르겠입니다 그만하다.

일부 시나리오에서는 배열을 순회하는 것을 중지하고 주어진 값이있을 경우이를 단순히 취합니다.

예를 들어 중첩 된 구성 배열을 재정의해야하는 경우 특정 키를 기본 키로 지정하지 않을 수 있습니다.

여기 내 솔루션입니다 :

public static function merge_lvl2(){ 
    $args = func_get_args(); 
    return static::merge($args, 2); 
} 

public static function merge($args, $maxDepth = null, $depth = 1) 
{ 
    $merge = []; 
    foreach($args as $arg) { 
     if (is_array($arg)) { 
      if (is_array($merge)) { 
       if ($maxDepth == $depth) { 
        $arg += $merge; 
        $merge = $arg; 
       } else { 
        $merge = array_merge($merge, $arg); 
       } 
      } else { 
       $merge = $arg; 
      } 
     } 
    } 
    if ($maxDepth !== $depth) { 
     foreach($args as $a) { 
      if (is_array($a)) { 
       foreach($a as $k => $v) { 
        if (isset($merge[$k]) && is_array($merge[$k])) { 
         $merge[$k] = static::merge([$merge[$k], $v], $maxDepth, $depth + 1); 
        } 
       } 
      } 
     } 
    } 
    return $merge; 
} 

당신은 당신이 원하는대로 병합 할만큼 배열을 전달할 수 있습니다.

$merged = ClassName::merge_lvl2([..array1..], [..array2..], [..array3..], etc...); 

레벨 2에서 병합이 중지되고 병합 대신 대체 키가 적용됩니다.

또한 args 배열로 직접 병합을 호출하고 최대 깊이를 설정할 수 있습니다.

최대 깊이를 설정하지 않으면 전체 배열을 통과합니다.

관련 문제