php - PHP 创建一个具有预定义列和宽度的字符串
问题描述
我有这样的标准数据:
+------------+----------+-------+
| name | position | width |
+------------+----------+-------+
| REFERENCE | 20 | 9 |
| TRNSXN | 48 | 14 |
| ESTIM_DATE | 64 | 8 |
+------------+----------+-------+
3 rows in set (0.00 sec)
我的目标是创建一个字符串,我可以在其中定义每个元素的位置和宽度,就像这样
ETL E7954 20181123
如您所见,第一个字符串是REFERENCE
= "ETL"
; 从 20 开始,最多 9 个字符。如果它更少,则将空间放在其余部分。
然后第二个字符串是TRNSXN
= E7954
; 以 48 开头,最多 14 个字符,如果字符少,则在其余部分放置空格。以此类推,以此类推。
到目前为止,这是我的代码:
private function preFormattedText($string, $width)
{
return str_pad($string, $width, " ", STR_PAD_RIGHT);
}
public function actionHermesAnsi($id)
{
$modelWestims =getDataAsAboveDescription ;
$stringWestim = null;
$stringWestim .= $this->preFormattedText('ETL', (int)$modelWestims[0]['width']);
$stringWestim .= $this->preFormattedText('E7954', (int)$modelWestims[1]['width']);
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=westim.txt");
print $stringWestim;
exit();
}
我知道ETL E7954
我无法定义它的位置。请帮忙。
解决方案
这样的事情会做你想要的:
function formatStrings($strings, $positions) {
$position = 0;
foreach ($strings as $key => $str) {
// do we need to move to a new position to display the next string?
if ($positions[$key]['position'] > $position) {
echo str_pad('', $positions[$key]['position'] - $position - 1);
$position = $positions[$key]['position'];
}
// display the string
echo str_pad($str, $positions[$key]['width']);
$position += $positions[$key]['width'] - 1;
}
}
$strings = array('ETL','E7954','20181123');
$positions = array(array('position' => 20, 'width' => 9),
array('position' => 48, 'width' => 14),
array('position' => 64, 'width' => 8));
echo formatStrings($strings, $positions);
推荐阅读
- android - 如何在 android xml 的组件/视图中添加 2 种样式
- azure-data-lake - 如何使用 python 脚本将 csv 文件从 GitHub 上传到 azure 数据湖
- mongodb - 使用 Nifi 查询 MongoDB
- module - nameError:名称“枢轴”未定义
- python - 使用输入参数进行棉花糖验证
- javascript - typeahead.js 没有从本地获取数据
- python - numpy 中的元组(字典)最大值
- python - tf.einsum 矩阵乘法用于不同形状的张量
- reactjs - 如何在渲染后立即调用`localStorage.getItem`
- docker - Docker 放置约束测试空白/任何标签