2012-07-06 72 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 2012-07-06 21:04:29