我有一张像这样的桌子:
client_id | name | bank_name
------------------------------------
1 | Steve | Bank 1
1 | Steve | Bank 1
1 | Steve | Bank 3
我想打印出如下声明:
Client: Steve
Current bank: Bank 1, Bank 3
这是我当前的代码。(请记住,我正在以模板pdf格式打印此文件,因此请忽略php和div标签,它们是正确的。):
<?php
$currentBank = '';
foreach($data as $bank){
$currentBank .= $bank->bank_name;
?>
<div>Current bank: {{ $currentBank }} </div>
<?php
}
?>
谁能帮助我实现所需的格式,而忽略重复项并以“ Bank 1,Bank2”格式打印。
当前与我的代码,我的输出是:
Current bank: Bank1
Current bank: Bank1Bank1
Current bank: Bank1Bank1Bank3
注意:DISTINCT
由于模板的另一部分要求我打印出包括重复项在内的所有内容,因此无法在sql查询中使用
您需要花费全部的for循环遍历所有可用数据。将名称收集到一个新的数组中,因为这使我们可以轻松地通过array_unique获得唯一性。另一个选择是将bankNames作为键存储在数组中-请参见第二个示例
<?
$currentBank = '';
$bankNameList = [];
foreach($data as $bank):
$bankNameList[] = $bank->bank_name;
}
$bankNameList = array_unique($bankNameList);
$currentBank = implode(', ', $bankNameList);
?>
<div>Current bank: {{ $currentBank }} </div>
<? endfor; ?>
第二个没有array_unique()的例子
<?
$currentBank = '';
$bankNameList = [];
foreach($data as $bank):
$bankNameList[$bank->bank_name]++;
}
$currentBank = implode(', ', array_keys($bankNameList));
?>
<div>Current bank: {{ $currentBank }} </div>
<? endfor; ?>
最好的方法是使用命名的辅助函数在模板之外组织此数据。这样,您的模板不会增加到成千上万行未记录的行
<?
/**
* Return all $item->bank_names
* as comma delimited string
*/
public function concatAllBankNames($data) {
$bankNameList = [];
foreach($data as $bank):
$bankNameList[$bank->bank_name]++;
}
return implode(', ', array_keys($bankNameList));
}
//.. in some controller
foreach ($databasedata as $row) {
$row[ $row['username'] ]['bank_names_concat'] = $this->concatAllBankNames($row['data']);
}
//assign data to template system somehow
$template->rows = $rows;
//or
$template['rows'] = $rows;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句