在多维数组中合并不同相同键上的两个键

时间:2012-07-06 17:57:16

标签: php arrays merge multidimensional-array

我有一个多维数组,我正在尝试合并键。我想合并在与我正在尝试合并的单独密钥上出现相同密钥的位置。

我当前的数组看起来像这样。

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] => 
    )
)

1 个答案:

答案 0 :(得分: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);
?>