在Foreach循环中删除多个列重复值

时间:2017-12-11 06:47:25

标签: php laravel-4.2

我使用此代码在多个属性名称中显示每个记录的特定用户。虽然我想显示1个名称而不是多个,包括他们的ID。

@foreach( $records as $record )
  @if( $record->investment_type == null )
  <tr>
    <td>{{ $record->client_id }}</td>
    <td>{{ $record->firstname }} {{ $record->lastname }}</td>
    <td>{{ $record->name }}</td>
    <td class="details-control"></td>
  </tr>
  @endif
@endforeach

这是我当前代码的输出。

enter image description here

虽然这是我想要的样子。

enter image description here

我试过,array_unique但输出错误

enter image description here

源代码来自:php Removes duplicate values in foreach并且刚刚从海报上解决了问题。但它不适合我。

非常感谢你的帮助。

更新

以下是来自$records的{​​{1}}的输出。

enter image description here

这是控制器内部的代码。

var_dump

2 个答案:

答案 0 :(得分:0)

laravel语法不太熟悉。您可以根据需要进行转换。 无论如何,要做到这一点,你需要检查以前的值。我假设这是按名称排序的。

首先创建上一个变量

<?php $prev_value =  null;?>

以下是我们检查之前值是否相同的代码

<?php if($prev_value == ($record->client_id)):?>
<td></td>
<td></td>
<?php else: ?>
<td>{{ $record->client_id }}</td>
<td>{{ $record->firstname }} {{ $record->lastname }}</td>
<?php endif; ?>

在循环结束时,只需在先前的值变量中添加当前值

<?php $prev_value = $record->client_id; ?>

整码

<?php $prev_value =  null;?>
<?php foreach( $records as $record ): ?>
  <?php if( $record->investment_type == null ): ?>
  <tr>

    <?php if($prev_value == ($record->client_id)):?>
    <td></td>
    <td></td>
    <?php else: ?>
    <td>{{ $record->client_id }}</td>
    <td>{{ $record->firstname }} {{ $record->lastname }}</td>
    <?php endif; ?>

    <td>{{ $record->name }}</td>
    <td class="details-control"></td>

    <?php $prev_value = $record->client_id; ?>

  </tr>
  <?php endif; ?>
<?php endforeach; ?>

答案 1 :(得分:0)

您不能使用array_unique,因为您有一个对象数组。 创建一个Id数组和一个名称数组, 在每个循环中,您将当前id和当前名称添加到这些数组中,然后在创建之前检查当前数据是否在数组中,如果不是,则将它们添加到它们中,如果它们已经存在则创建一个空。

当然,您必须检查第二个循环中的Is in数组是否显示在第一行的最小值。 请注意,此方法很脏,因为您在视图中执行了一些逻辑操作。 最好的方法是在你的模型上做到这一点。