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

How to display comma in PHP array?

我正在设置这个数组,它在我的站点中的大部分工作正常。注意:这是一个 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} 使换行有效。谢谢!

我从你的代码中得到的是,你想在相应的 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 ?>

问题是您期望数组元素中 { 之前的所有内容都是 $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
            }
        }
    }

完全按照您的需要设计视图比尝试使用代码来设计更简洁、更容易。例如这样的事情:

<?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; ?>