2012-07-06 2 views
0

키를 병합하려고하는 단일 다차원 배열이 있습니다. 병합하려는 키와 동일한 키에 동일한 키가있는 부분을 병합하고 싶습니다.다차원 배열의 다른 동일한 키에 두 개의 키를 병합

현재 배열은 다음과 유사합니다.

Array 
(
[0] => Array 
    (
     [zone_id] => 2 
     [zone_title] => Users 
     [link_title] => Users 
    ) 

[1] => Array 
    (
     [zone_id] => 2 
     [zone_title] => Users 
     [link_title] => Add User 
    ) 

[2] => Array 
    (
     [zone_id] => 3 
     [zone_title] => Locations 
     [link_title] => 
    ) 
) 

동일한 zone_id 키를 가진 배열을 함께 병합하는 경우를 제외하고는 그대로두고 나가고 싶습니다.

결과이 작품

Array 
(
[0] => Array 
    (
     [zone_id] => 2 
     [zone_title] => Users 
     [link_title] => Array 
          (
           [0] => Users 
           [1] => Add user 
          ) 
    ) 

[1] => Array 
    (
     [zone_id] => 3 
     [zone_title] => Locations 
     [link_title] => 
    ) 
) 

답변

0
<?php 
function merge_keys($arr){ 
    for ($key = 0; $key < count($arr); $key++) { 
     $zone_id = $arr[$key]['zone_id']; 
     $index = search($arr, $zone_id); 
     if ($index != $key && $index != -1){ 
      $link_title = $arr[$key]['link_title']; 
      $link_title2 = $arr[$index]['link_title']; 
      $arr[$key]['zone_id'] = $zone_id; 
      $arr[$key]['zone_title'] = $arr[$key]['zone_title']; 
      $arr[$key]['link_title'] = array($link_title, $link_title2); 
      unset($arr[$index]); 
     } 
    } 
    return $arr; 
} 

function search($arr, $zone_id){ 
    for ($i = count($arr) - 1; $i >= 0 ; $i--) { 
     $item = $arr[$i]; 
     $tmp_zone_id = $item['zone_id']; 
     if($tmp_zone_id == $zone_id){ 
      return $i; 
     } 
    } 
    return -1; 
} 

$arr = array(array('zone_id' => 2, 'zone_title' => 'Users', 'link_title' => 'Users'), 
      array('zone_id' => 2, 'zone_title' => 'Users', 'link_title' => 'Add User'), 
      array('zone_id' => 3, 'zone_title' => 'Locations', 'link_title' => '')); 

echo "Before change: \n"; 
print_r($arr); 
$arr = merge_keys($arr); 
echo "After change: \n\n"; 
print_r($arr); 
?> 
+0

감사합니다. 배열을 함께 꿰매는 것은 꽤 쉽습니다. 나는 이것에 관해 드로잉 보드로 돌아가서, 내가 질의의 시간에 원하는대로 배열을 만들 수 없는지를 볼지도 모른다. 다시 한번 감사드립니다. – MAZUMA

관련 문제