Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OpenTBS-使用令牌替换重复段落?_Php_Opentbs_Tinybutstrong - Fatal编程技术网

Php OpenTBS-使用令牌替换重复段落?

Php OpenTBS-使用令牌替换重复段落?,php,opentbs,tinybutstrong,Php,Opentbs,Tinybutstrong,我有一个基于文本(而不是基于表的).docx文档,其中的一个部分在段落中有几个位置可供替换。必须复制此段落,并为数组中的每个条目替换标记。我将继续梳理文档,但我有点拘泥于此--大多数示例都是基于表的,我不知道如何才能完成我的目标 以下是到目前为止我用作模板的.docx文件中部分的示例: [onshow; block=begin; personsblock=tbs:p;] Person 1 [flex_27.xx.01] [flex_27.xx.02], currently of [flex_27

我有一个基于文本(而不是基于表的).docx文档,其中的一个部分在段落中有几个位置可供替换。必须复制此段落,并为数组中的每个条目替换标记。我将继续梳理文档,但我有点拘泥于此--大多数示例都是基于表的,我不知道如何才能完成我的目标

以下是到目前为止我用作模板的.docx文件中部分的示例:

[onshow; block=begin; personsblock=tbs:p;]
Person 1
[flex_27.xx.01] [flex_27.xx.02], currently of [flex_27.xx.05], as amazing with the following: __{this has yet to be determined}__.
[onshow; block=end; personsblock=tbs:p]
。。。我目前的数据是:

$personarray = array(); 
$personarray[] = array('tID27.01.01'=> 'Steve', 'tID27.01.02'=>'Klutcher' , 'tID27.01.05'=>'', 'tID27.01.06'=>'Cook'); 
$personarray[] = array('tID27.02.01'=> 'Tommy', 'tID27.02.02'=>'Boonary' , 'tID27.02.05'=>'Clarksville', 'tID27.02.06'=>'Montgomery'); 
。。。在这一点上,我几乎迷路了。我将通过编程将中心“代码”(由xx标记)替换为相关人员的计数。合并和替换之间有什么区别?我如何结合行动?我可以对文档进行多次传递吗


很抱歉,如果这些问题看起来很基本,但正如我所说的,我已经被困在这个问题上两天了。

当你使用
block=begin。。。block=end
这是绝对边界的语法。它们指示源中块的起点和终点的位置。 在文档中,您无权访问内部XML源。因此,建议对blocs使用相对语法

在PHP中,您的数据结构应该如下所示:

$personarray = array(); 
$personarray[] = array('c01'=> 'Steve', 'c02'=>'Klutcher' , 'c05'=>'', 'c06'=>'Cook'); 
$personarray[] = array('c01'=> 'Tommy', 'c02'=>'Boonary' , 'c05'=>'Clarksville', 'c06'=>'Montgomery'); 
Person 1
[person.c01;block=tbs:p] [person.c02], currently of [person.c05], as amazing ...
在DOCX中,您的模板片段应该如下所示:

$personarray = array(); 
$personarray[] = array('c01'=> 'Steve', 'c02'=>'Klutcher' , 'c05'=>'', 'c06'=>'Cook'); 
$personarray[] = array('c01'=> 'Tommy', 'c02'=>'Boonary' , 'c05'=>'Clarksville', 'c06'=>'Montgomery'); 
Person 1
[person.c01;block=tbs:p] [person.c02], currently of [person.c05], as amazing ...
假设这两行在同一段中

表达式
[person.01;block=tbs:p]
是一个合并列“01”的tbs字段,并将块绑定定义为嵌入此字段的段落

它们也是原始PHP spinnet中的一些问题:

  • 列名不应该有点(.),因为这是TBS字段名的分隔符
  • 我使用前缀“c”,因为PHP将数字字符串键作为数字索引

点语法从键继承到原始数据——我将其改为下划线,因此数组键看起来更像“tid27\u 01\u 01”。我在文档中遇到的最大问题之一是缩写命名语法。进入TBS cold,我很难从变量/字段/块名中分辨出关键字。例如,使用“column_01”而不是“c01”在尝试了解具有独特语法的新库时会非常有帮助。但我肯定会开始欣赏TBS的力量。在你的帮助下,我能够使合并工作。谢谢