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

1 に答える 1

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);
?>
于 2012-07-06T19:01:06.427 に答える