0

我需要重命名数组 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
                        )

                )

        )
  )

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

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

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

2 回答 2

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;
}
于 2013-10-08T13:46:24.767 回答
0

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

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

但是要将键 *foo_id* 的名称更改为id您可以执行类似的操作

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

但正如我所说......它可能会变得非常混乱。尤其是多维数组;)

于 2013-10-08T13:55:08.877 回答