php - 具有多维数组的array_splice 会中断插入的数组
问题描述
我有以下数组结构:
$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
)
)
我可以使用以下代码来实现这一点,但对我来说感觉有点 hacky:
# 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/' ];
}
有没有办法将数组项插入到指定索引处的多维数组中,而无需编写自定义函数或使用上面的 hack?
解决方案
由于您要插入的项目是一个数组,并且array_splice
需要一个项目数组,因此将您的数组放入一个数组中。
此外,由于您想在最后一个元素之前插入一些东西,您可以使用负数作为偏移量从末尾向后计数。(效果与您获得的数据相同,但对不同大小的数组很重要。)
array_splice(
$tpl['breadcrumbs'],
-1,
0,
[[ 'title' => $category->category->name, 'text' => $category->category->name, 'url' => SITE_DOMAIN.ADMIN_PATH.'/items/' ]]
);
推荐阅读
- html - HTML 选择不会在 chrome 上居中文本
- raku - 跨 raku shell 命令维护 python 虚拟环境
- python - 测试模型张量流
- kotlin - 当我从第一个函数中转换值并再次调用它时,我得到了语法错误
- php - 用于测试和实际数据库的 PHP Laravel SQLite
- sql - 替代耗时循环进行年累计(YTM – 逐月)测量
- python - 在python中对对象值使用迭代
- r - 使用 data.table 连接将表达式作为参数提供给函数
- xcode - 如何将 .sh 文件集成到 .pkg 应用程序文件中
- javascript - Javascript - 对预检请求的响应未通过访问控制检查