【问题标题】:merge two keys on different identical keys in a multidimensional array合并多维数组中不同相同键上的两个键
【发布时间】:2012-07-06 17:57:16
【问题描述】:

我有一个单一的多维数组,我正在尝试合并键。我想在与我尝试合并的键不同的键上出现相同键的地方进行合并。

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

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

【问题讨论】:

    标签: php arrays merge multidimensional-array


    【解决方案1】:
    <?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);
    ?>
    

    【讨论】:

    • 感谢这项工作。将数组拼接在一起相当多。我可能会回到绘图板上,看看我是否不能在查询时像我想要的那样构建数组。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多