我需要在数组php中重命名密钥

时间:2013-10-08 13:39:11

标签: php arrays

我需要在数组php中重命名该键: 我需要将密钥名称更改为这个,menu_link_content子数组:

Array
    (
        [0] => Array
            (
                [menu_link_id] => 1
                [menu_id] => 2
                [parent_id] => 0
                [page_id] => 1
                [menu_link_type] => page
                [menu_link_order] => 
                [menu_link_url] => 
                [menu_link_class] => 
                [menu_link_date] => 2013-10-08 14:23:16
                [page_path] => 
                [menu_link_content] => Array
                    (
                        [0] => Array
                            (
                                [menu_link_content_id] => 1
                                [menu_link_id] => 1
                                [lang_id] => 1
                                [menu_link_text] => home
                                [menu_link_title] => 
                                [lang_flag] => italia.jpg
                                [lang_name] => Italiano
                            )

                        [1] => Array
                            (
                                [menu_link_content_id] => 3
                                [menu_link_id] => 1
                                [lang_id] => 3
                                [menu_link_text] => home inglese
                                [menu_link_title] => 
                                [lang_flag] => inghilterra.jpg
                                [lang_name] => Inglese
                            )

                    )

            )

        [1] => Array
            (
                [menu_link_id] => 2
                [menu_id] => 2
                [parent_id] => 0
                [page_id] => 2
                [menu_link_type] => page
                [menu_link_order] => 
                [menu_link_url] => 
                [menu_link_class] => 
                [menu_link_date] => 2013-10-08 14:23:19
                [page_path] => 
                [menu_link_content] => Array
                    (
                        [0] => Array
                            (
                                [menu_link_content_id] => 2
                                [menu_link_id] => 2
                                [lang_id] => 1
                                [menu_link_text] => prova
                                [menu_link_title] => 
                                [lang_flag] => italia.jpg
                                [lang_name] => Italiano
                            )

                    )

            )

    )

我想得到这样的结果:

Array
        (
            [0] => Array
                (
                    [menu_link_id] => 1
                    [menu_id] => 2
                    [parent_id] => 0
                    [page_id] => 1
                    [menu_link_type] => page
                    [menu_link_order] => 
                    [menu_link_url] => 
                    [menu_link_class] => 
                    [menu_link_date] => 2013-10-08 14:23:16
                    [page_path] => 
                    [menu_link_content] => Array
                        (
                            [this_lang_id in this case is 1] => Array
                                (
                                    [menu_link_content_id] => 1
                                    [menu_link_id] => 1
                                    [lang_id] => 1
                                    [menu_link_text] => home
                                    [menu_link_title] => 
                                    [lang_flag] => italia.jpg
                                    [lang_name] => Italiano
                                )

                            [this_lang_id in this case is 3] => Array
                                (
                                    [menu_link_content_id] => 3
                                    [menu_link_id] => 1
                                    [lang_id] => 3
                                    [menu_link_text] => home inglese
                                    [menu_link_title] => 
                                    [lang_flag] => inghilterra.jpg
                                    [lang_name] => Inglese
                                )

                        )

                )

            [1] => Array
                (
                    [menu_link_id] => 2
                    [menu_id] => 2
                    [parent_id] => 0
                    [page_id] => 2
                    [menu_link_type] => page
                    [menu_link_order] => 
                    [menu_link_url] => 
                    [menu_link_class] => 
                    [menu_link_date] => 2013-10-08 14:23:19
                    [page_path] => 
                    [menu_link_content] => Array
                        (
                            [this_lang_id in this case is 1] => Array
                                (
                                    [menu_link_content_id] => 2
                                    [menu_link_id] => 2
                                    [lang_id] => 1
                                    [menu_link_text] => prova
                                    [menu_link_title] => 
                                    [lang_flag] => italia.jpg
                                    [lang_name] => Italiano
                                )

                        )

                )

        )

然后我不想要这个[menu_link_content] [0]但是我想要这个[menu_link_content] [1],因为一个是[menu_link_content]数组中包含的lang_id。

我该怎么办?

MOD 的 这是我的功能:

$this->query('
    SELECT c.*, l.lang_flag, l.lang_name
    FROM tb_menu_link_content AS c
    INNER JOIN tb_lang AS l
    ON l.lang_id = c.lang_id
    WHERE c.menu_link_id = "'.$menu_link['menu_link_id'].'"
');
$menu_link_content = $this->fetch_assoc_all();
foreach($menu_link_content as $key => $value){
    $lang_id = $value['lang_id'];
    $new_array[$lang_id] = $value;
}
$menu_link_content = array('menu_link_content'=>$new_array);
$array[] = array_merge($menu_link, $menu_link_content);

运行良好但复制了第二个子数组上的语言[menu_link_content] 第二个[menu_link_content]

中不存在lang_id 3
Array
(
    [0] => Array
        (
            [menu_link_id] => 1
            [menu_id] => 2
            [parent_id] => 0
            [page_id] => 1
            [menu_link_type] => page
            [menu_link_order] => 
            [menu_link_url] => 
            [menu_link_class] => 
            [menu_link_date] => 2013-10-08 14:23:16
            [page_path] => 
            [menu_link_content] => Array
                (
                    [1] => Array
                        (
                            [menu_link_content_id] => 1
                            [menu_link_id] => 1
                            [lang_id] => 1
                            [menu_link_text] => home
                            [menu_link_title] => 
                            [lang_flag] => italia.jpg
                            [lang_name] => Italiano
                        )

                    [3] => Array
                        (
                            [menu_link_content_id] => 3
                            [menu_link_id] => 1
                            [lang_id] => 3
                            [menu_link_text] => home inglese
                            [menu_link_title] => 
                            [lang_flag] => inghilterra.jpg
                            [lang_name] => Inglese
                        )

                )

        )

    [1] => Array
        (
            [menu_link_id] => 2
            [menu_id] => 2
            [parent_id] => 0
            [page_id] => 2
            [menu_link_type] => page
            [menu_link_order] => 
            [menu_link_url] => 
            [menu_link_class] => 
            [menu_link_date] => 2013-10-08 14:23:19
            [page_path] => 
            [menu_link_content] => Array
                (
                    [1] => Array
                        (
                            [menu_link_content_id] => 2
                            [menu_link_id] => 2
                            [lang_id] => 1
                            [menu_link_text] => prova
                            [menu_link_title] => 
                            [lang_flag] => italia.jpg
                            [lang_name] => Italiano
                        )

                    [3] => Array
                        (
                            [menu_link_content_id] => 3
                            [menu_link_id] => 1
                            [lang_id] => 3
                            [menu_link_text] => home inglese
                            [menu_link_title] => 
                            [lang_flag] => inghilterra.jpg
                            [lang_name] => Inglese
                        )

                )

        )
  )

我的问题是: 我有这个数组$菜单,我有一个数组$ languages

我必须创建一个为找到的每种语言创建的函数:

<input type="text" name="menu_link_text[$language['lang_id']]" value="$menu['menu_link_text'][$language['lang_id']">

2 个答案:

答案 0 :(得分:0)

让我们将原始数组变量称为$my_array

foreach($my_array as $idx => $value) {
    // load the 'menu_link_content'
    $menu_link_content = $value['menu_link_content'];
    // prepare a new placeholder
    $new_menu_link_content = [];
    // iterate through $menu_link_content
    foreach($menu_link_content as $item) {
        // remap items
        $id = $item['menu_link_content_id' ];
        $new_menu_link_content[ $id ] = $item;
    }
    // replacing 'menu_link_content'
    $my_array[$idx]['menu_link_content'] = $new_menu_link_content;
}

答案 1 :(得分:0)

您无法更改已创建数组中给定索引的键名称。我不会给你解决方案的代码,但你必须通过迭代现有的代码来创建一个新的数组,并根据你认为合适的方式命名新数组中的键,同时从你正在迭代的现有数组中绘制值。 要不让您的数据从 0 键开始,您只需确保手动输入 1 作为第一个密钥并继续运行。

只要“new”数组中的键不与现有数组中的键名冲突,就可以重用该数组并插入新值并取消设置旧值。但这可能会变得混乱而且难以调试。

但要将密钥* foo_id *的名称更改为 id ,您可以执行类似

的操作
foreach ( $array as $key => $value )
{
  $array[$key] ['id'] = $array[$key] ['foo_id'];
  unset($array[$key]['foo_id']);
}

但正如我所说......它会变得相当混乱。特别是对于多维数组;)