在数组中添加字符串

时间:2018-08-31 02:37:21

标签: php arrays

我正在构建一个菜单项,将从数据库中获取数据。我想为所有项目添加一个类,即使该数组中的类尚不存在。但是,当数据库中确实存在类元素时,初始类将被覆盖。

从一开始就添加课程的最佳实践是什么?这是示例代码:-

$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来设置更多菜单属性。

2 个答案:

答案 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中的字段覆盖。