【问题标题】:Rename key of array重命名数组的键
【发布时间】:2020-05-28 15:28:56
【问题描述】:

我有一个表,我从中获取数据以输出它们。表由一堆个人数据组成,命名如下 - 姓名、姓氏、电话号码、电子邮件、出生年份、开始时间等...

当我想在 laravel 上的视图中输出数据时,我毫无问题地获取它们,但事实是,我没有手动编写每个条目,而是使用循环。在使用@foreach, 时,我只得到了我之前指定的表列的名称,所以基本上,当我输出值时,我得到的是“name”而不是“Name”,“lastName”而不是“Last Name”等。另外,我有一些列名只有 3 个字母,例如“pro”,这可能意味着数千种事物。

那么,我如何重命名这些键,以便我的输出应该是人类可读的?

@foreach($data->getAttributes() as $key => $value)
   @if(!empty($value))
       <tr><td>{{ $key }}</td><td>{{ $value }}</td></tr>
   @endif
@endforeach

【问题讨论】:

标签: php arrays database laravel


【解决方案1】:

您需要将此名称存储在某处(即在数据库表中)并将其与集合一起检索。

一个关于如何做到这一点的基本且可能是幼稚的示例(不考虑架构最佳实践),对于如下表:

CREATE TABLE data (
    ...
    name VARCHAR(255),
    nameText VARCHAR(255),
    content TEXT,
    ...

你在哪里有这样的记录:

[
    'name' => 'lastName',
    'nameText' => 'Last Name',
    'content' => 'This is your last name
]

你的控制器中可以有这样的东西:

$data = Model::get();
return view('my-view', ['data' => $data]);

那么在你看来:

@foreach($data as $item)
    <tr><td>{{ $item->nameText }}</td><td>{{ $item->content}}</td></tr>
@endforeach

【讨论】:

    【解决方案2】:

    对此有两种解决方案。第一个只是简单地在刀片中使用 if else 条件:

    @foreach($data->getAttributes() as $key => $value)
        @if(!empty($value))
            @if($key === 'name')
                <tr><td>Name</td><td>{{ $value }}</td></tr>
            @elseif($key === 'lastName')
                <tr><td>Last Name</td><td>{{ $value }}</td></tr>           
            @else
                <tr><td>{{ $key }}</td><td>{{ $value }}</td></tr>
            @endif
       @endif
    @endforeach
    

    另一种解决方案是为每个键使用CUSTOM PARTIALS

    让我们为您的键定义自定义部分:

    // partials/display_data/name.blade.php
    <tr><td>Name</td><td>{{ $value }}</td></tr>
    
    // partials/display_data/lastName.blade.php
    <tr><td>Last Name</td><td>{{ $value }}</td></tr>
    

    最后,你可以简单地说:

    @foreach($data->getAttributes() as $key => $value)
        @includeIf(!empty($value), "partials.custom_data.{$key}", compact('value'))
    @endforeach
    

    【讨论】:

    • 我认为这不是一个好方法,因为它将数据与布局非常紧密地耦合在一起,并且没有太大的灵活性。它将命名值硬编码到文件中,我认为更好的方法是使名称可编辑/成为数据结构的一部分。
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2014-03-19
    • 2015-12-22
    • 2021-05-25
    相关资源
    最近更新 更多