代码之家  ›  专栏  ›  技术社区  ›  BenM

多维数组断开插入数组的数组拼接

php
  •  1
  • BenM  · 技术社区  · 6 年前

    我有以下数组结构:

    $tpl = [
        'breadcrumbs' => [
            [ 'title' => 'Item Database', 'text' => 'Item Database', 'url' => SITE_DOMAIN.ADMIN_PATH.'/items/' ],
            [ 'title' => $category->name, 'text' => $category->name, 'active' => true ]
        ]
    ];
    

    我试图插入一个元素 之前 最后一个元素,我想我可以用 array_splice 具体如下:

    if( !is_null($category->category) )
    {
        array_splice(
            $tpl['breadcrumbs'],
            1,
            0,
            [ 'title' => $category->category->name, 'text' => $category->category->name, 'url' => SITE_DOMAIN.ADMIN_PATH.'/items/' ]
        );
    }
    

    然而,这似乎使我试图插入的项变平(根据预期行为),并产生以下输出:

    Array
    (
        [0] => Array
            (
                [title] => Item Database
                [text] => Item Database
                [url] => https://local/qmdepot/admin/items/
            )
    
        [1] => Medical Department
        [2] => Medical Department
        [3] => https://local/qmdepot/admin/items/
        [4] => Array
            (
                [title] => Class 1
                [text] => Class 1
                [active] => 1
            )
    
    )
    

    而预期的产出应该是:

    Array
    (
        [0] => Array
            (
                [title] => Item Database
                [text] => Item Database
                [url] => https://local/qmdepot/admin/items/
            )
        [1] => Array
            (
                [title] => Medical Department
                [text] => Medical Department
                [url] => https://local/qmdepot/admin/items/
            )
        [2] => Array
            (
                [title] => Class 1
                [text] => Class 1
                [active] => 1
            )
    )
    

    我可以使用以下代码来实现这一点,但我觉得有点老套:

    # Set up the breadcrumbs:
    if( !is_null($category->category) )
    {
        $tpl['breadcrumbs'][2] = $tpl['breadcrumbs'][1];
        $tpl['breadcrumbs'][1] = [ 'title' => $category->category->name, 'text' => $category->category->name, 'url' => SITE_DOMAIN.ADMIN_PATH.'/items/' ];
    }
    

    是否有任何方法可以在指定索引处将数组项插入多维数组,而无需编写自定义函数或使用上面的技巧?

    1 回复  |  直到 6 年前
        1
  •  2
  •   user3942918    6 年前

    因为要插入的项是数组,并且 array_splice 获取一个项目数组,将数组放入一个数组中。

    另外,由于要在最后一个元素之前插入一些内容,因此可以使用负数作为偏移量,以便从末尾向后计数。(效果与您获得的数据相同,但对不同大小的数组很重要。)

    array_splice(
        $tpl['breadcrumbs'],
        -1,
        0,
        [[ 'title' => $category->category->name, 'text' => $category->category->name, 'url' => SITE_DOMAIN.ADMIN_PATH.'/items/' ]]
    );