我正在设置此数组,并且大多数情况下它在我的网站中正常运行。注意:这是Joomla网站和VirtueMart PHP文件,用于客户在订购产品时收到的电子邮件。
$addressBTOrder = array('email{br}', 'company{br}', 'title', 'first_name', 'last_name{br}', 'address_1{br}', 'address_2{br}', 'city', 'virtuemart_state_id', 'zip{br}', 'virtuemart_country_id{br}', 'phone_1{br}', 'phone_2{br}');
但是,我需要在数组中的CITY之后添加一个逗号(,),以在最终输出中实际显示逗号。如果我只是把逗号放在城市之后:
'city,'
......它不起作用,城市输出根本没有显示。我也尝试了逗号(%2c)的十六进制值,但它也没有用。
以下是创建输出的代码:
<?php
foreach ($addressBTOrder as $fieldname) {
$fieldinfo = explode('{',$fieldname);
if (!empty($this->userfields['fields'][$fieldinfo[0]]['value'])) { ?>
<span class="values vm2<?php echo '-' . $this->userfields['fields'][$fieldinfo[0]]['name'] ?>" ><?php echo $this->escape($this->userfields['fields'][$fieldinfo[0]]['value']) ?></span> <?php
if (isset($fieldinfo[1]) && $fieldinfo[1] == 'br}') { ?>
<br class="clear" /> <?php
}
}
}
?>
我需要在最终输出中使用哪些代码来显示逗号?例如,我使用{br}进行换行工作。谢谢!
答案 0 :(得分:2)
我从您的代码中得到的是,您希望在每次输出相应的 userfield 值后指定某种后缀。
另一种方法是使用CSS类。这意味着您可以在不添加额外元素的情况下正确设置内容样式。
例如,在没有任何额外的情况下返回原始数组
$addressBTOrder = ['email', 'company', 'title', 'city', ...];
foreach ($addressBTOrder as $field) :
$userField = $this->userfields['fields'][$field];
if (!empty($userField['value'])) : ?>
<span class="values vm2-<?= $userField['name'] ?>">
<?= $this->escape($userField['value']) ?>
</span>
<?php endif; endforeach ?>
并且,因为您已经添加了我猜的CSS类,vm2-email
,vm2-company
等...
.vm2-email, .vm2-company {
display: block; /* same as adding a newline */
}
.vm2-city:after {
content: ",";
}
这里的原始答案......
我建议使用更简洁的数据格式。例如
$br = '<br class="clear" />';
$addressBTOrder = [[
'key' => 'email',
'suffix' => $br
], [
'key' => 'company',
'suffix' => $br
], [
'key' => 'title',
'suffix' => ''
], /* etc */ [
'key' => 'city',
'suffix' => ','
]];
然后你可以像这样迭代......
<?php foreach ($addressBTOrder as $field) :
$userField = $this->userfields['fields'][$field['key']];
if (!empty($userField['value'])) : ?>
<span class="values vm2-<?= $userField['name'] ?>">
<?= $this->escape($userField['value']), $field['suffix'] ?>
</span>
<?php endif; endforeach ?>
答案 1 :(得分:1)
问题在于,您希望数组元素中{
之前的所有内容都成为$this->userfields['fields']
数组中的键。但是当你在那里有一个逗号时,它与数组键不匹配。因此,在将逗号用作键之前,需要删除逗号。如果它有逗号,则需要将其添加到输出中。
foreach ($addressBTOrder as $fieldname) {
$fieldinfo = explode('{',$fieldname);
$name = $fieldinfo[0];
if ($name[-1] == ",") {
$comma = ",";
$name = substr($name, 0, -1);
} else {
$comma = "";
}
if (!empty($this->userfields['fields'][$name]['value'])) { ?>
<span class="values vm2<?php echo '-' . $this->userfields['fields'][$name]]['name'] ?>" ><?php echo $this->escape($this->userfields['fields'][$name]['value']) . $comma; ?></span> <?php
if (isset($fieldinfo[1]) && $fieldinfo[1] == 'br}') { ?>
<br class="clear" /> <?php
}
}
}
答案 2 :(得分:1)
设计视图更加干净和简单,而不是尝试使用代码执行此操作。例如:
<?php if(!empty($this->userfields['fields']['email']['value'])): ?>
<span class="values vm2-email">
<?= $this->escape($this->userfields['fields']['email']['value']) ?></span>
</span>
<br class="clear" />
<?php endif; ?>
<?php if(!empty($this->userfields['fields']['city']['value'])): ?>
<span class="values vm2-city">
<?= $this->escape($this->userfields['fields']['city']['value']) ?>, </span>
</span>
<?php endif; ?>
<?php if(!empty($this->userfields['fields']['virtuemart_state_id']['value'])): ?>
<span class="values vm2-virtuemart_state_id">
<?= $this->escape($this->userfields['fields']['virtuemart_state_id']['value']) ?></span>
</span>
<?php endif; ?>