如何为视图中的非唯一记录设置相同的颜色

How to set same color for non unique records in view

如果 table 行中的相同数据在视图中显示红色,我正在尝试创建。

<tbody>
<?php 

$i = 1;
foreach ($data as $item) : 

?>
<tr>
    <td>
    <?php
        $text = $item->serial;

        if ($text == $text) {
            echo '<span class="text-danger">' . $text . '</span>';
        } else {
            echo '<span class="text-success">' . $text . '</span>';
        }
    ?>
    </td>
</tr>

<?php 

endforeach;

?>

</tbody>

您需要通过循环来计算序列号,并将serial设置为键。如果键再次出现,请增加它。循环显示数据时,如果serial计数大于1,则进入red,否则为黑色。

片段:

<tbody>
<?php 

$i = 1;

$serial_count = [];

foreach($data as $item):
    $serial_count[$item->serial] = (isset($serial_count[$item->serial]) ? $serial_count[$item->serial] : 0) + 1;
endforeach;

foreach ($data as $item) : 

?>
<tr>
    <td>
    <?php
        $text = $item->serial;

        if ($serial_count[$text] > 1) {
            echo '<span class="text-danger">' . $text . '</span>';
        } else {
            echo '<span class="text-success">' . $text . '</span>';
        }
    ?>
    </td>
</tr>

<?php 

endforeach;

?>

</tbody>

您不需要使用自己的计数技术,只需隔离 serial 列数据,然后调用 array_count_values()。然后,您便拥有了在标记中编写颜色样式条件所需的所有信息。

我建议 printf() 以提高代码段的可读性。

虽然text-在class名字中重复出现,但我不喜欢拆分class名字以节省字符。这样一来,当你想用你的 IDE 搜索你的项目时 text-success,你不会错过这个。

代码:(Demo)

$data = [
    (object)['serial' => 4444, 'note' => '-'],
    (object)['serial' => 4444, 'note' => 'information'],
    (object)['serial' => 111, 'note' => '-'],
];

$serialCounts = array_count_values(array_column($data, 'serial'));

foreach ($data as $obj) {
    printf(
        '<span class="%s">%s</span>',
        $serialCounts[$obj->serial] > 1 ? 'text-danger' : 'text-success',
        $obj->serial
    );
}

输出:

<span class="text-danger">4444</span>
<span class="text-danger">4444</span>
<span class="text-success">111</span>