【问题标题】:Get unique values from database column (each cell has comma separated value)从数据库列中获取唯一值(每个单元格都有逗号分隔值)
【发布时间】:2017-08-25 19:13:49
【问题描述】:

我正在尝试通过 foreach 从数据库列中获取唯一值作为列表选项,其中每个单元格都有多个用逗号分隔的值。

数据库单元:

  1. 门、窗
  2. 窗口,工作表
  3. 床单、门

我正在尝试将以下内容作为选择选项:

  1. 门
  2. 窗口
  3. 表

我正在使用 laravel 并尝试了以下操作:

我的控制器看起来像:

$products = DB::table('dealers')->select('products')->distinct()->get();

我的刀片视图如下所示:

<select>
<option value="">All</option>
@foreach( $products as $product)
    <?php
    foreach(explode(", ", $product->products) as $value)

        printf(
            '<option value="%1$s">
                                    %1$s
                                </option>',
            $value
        );
    ?>
@endforeach

我得到以下输出: [1] 门 [2] 窗 [3] 窗 [4] 床单 [5] 床单 [6] 门

谁能帮忙!我需要制作:[1] 门 [2] 窗户 [3] 床单

【问题讨论】:

  • 这是一个设计问题。产品应该是相关表中的不同实体,而不是分隔列表。
  • Here 对我有用!!!!!

标签: php laravel


【解决方案1】:

很简单,您可以将每个术语保存在数组中。然后检查数组中是否不存在值。 试试下面的 laravel 刀片视图代码:

<select>
    <option value="">All</option>
    <?php $array = []; ?>
    @foreach( $products as $product)
        @foreach(explode(", ", $product->products) as $value)
            @if(!in_array($value, $array))
            <option value="{{ $value }}">{{ $value }}</option>
            @endif
        @endforeach
    @endforeach
</select>

【讨论】:

    【解决方案2】:

    PHP 拥有庞大的标准数组函数库,包括array_unique

    编辑

    我错过了外循环。您必须获得整个数据集的唯一性,而不仅仅是每行

    $uniqueProducts = array_unique(array_merge(...array_map(function($row) {
       return explode(', ', trim($row));
    }, $products));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2022-06-15
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多