我正在构建一个菜单项,将从数据库中获取数据。我想为所有项目添加一个类,即使该数组中的类尚不存在。但是,当数据库中确实存在类元素时,初始类将被覆盖。
从一开始就添加课程的最佳实践是什么?这是示例代码:-
$menu = [
'title' => $title,
'url' => $url,
'attributes' => [
'class' => 'link-item'
]
];
// assuming that the $data['attributes'] is the data fetched from the database
// assuming that the $data['attributes'] structure are as follows:-
// $data['attributes']['title'] = 'hello';
// the initial class set should be added to $data['attributes']['class']
// $data['attributes']['class'] should be 'link-item icon-something'
// $data['attributes']['class'] = 'icon-something';
// $data['attributes']['target'] = '_blank';
if (isset($data['attributes'])) {
$menu['attributes'] = $data['attributes'];
}
请注意,有一个管理ui来设置更多菜单属性。
答案 0 :(得分:0)
如果要添加值而不是覆盖它们,则将需要以下内容:
$menu = [
'title' => 'old-title',
'url' => 'http://example.com',
'attributes' => [
'class' => 'link-item'
]
];
$data['attributes']['title'] = 'hello';
$data['attributes']['class'] = 'icon-something';
$data['attributes']['target'] = '_blank';
if (isset($data['attributes'])) {
foreach ($data['attributes'] as $key => $value) {
if (!empty($menu['attributes'][$key])) {
$menu['attributes'][$key] .= ' ' . $value;
}
else {
$menu['attributes'][$key] = $value;
}
}
}
print_r($menu);
输出:
Array
(
[title] => old-title
[url] => http://example.com
[attributes] => Array
(
[class] => link-item icon-something
[title] => hello
[target] => _blank
)
)
答案 1 :(得分:0)
最简单的答案是只使用array_merge
:
$menu['attributes'] = array_merge($data['attributes'], $menu['attributes']);
这样,$data
和$menu
中存在的任何字段都将被$menu
中的字段覆盖。