如何在PHP数组中显示逗号?

时间:2018-06-14 23:20:07

标签: php arrays joomla

我正在设置此数组,并且大多数情况下它在我的网站中正常运行。注意:这是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}进行换行工作。谢谢!

3 个答案:

答案 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-emailvm2-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; ?>