Php 在Smarty中分解对象变量

Php 在Smarty中分解对象变量,php,smarty,explode,smarty3,Php,Smarty,Explode,Smarty3,我正在使用该库显示Gmail中的用户联系人列表。对象成员是displayName,我使用它的方式如下: {foreach from=$contacts key=k item=contact} <span class="name">{$contact->displayName}</span> {/foreach} {foreach from=$contacts key=k item=contact} <span class="first-nam

我正在使用该库显示Gmail中的用户联系人列表。对象成员是displayName,我使用它的方式如下:

{foreach from=$contacts key=k item=contact}
    <span class="name">{$contact->displayName}</span>
{/foreach}
{foreach from=$contacts key=k item=contact}
    <span class="first-name">{$contact-firstName}</span>
    <span class="last-name">{$contact->lastName}</span>
{/foreach}
返回

Fatal error :  Call to undefined method Hybrid_User_Contact::strtok()
我现在正试着做这样的事情

{assign var=$contact value=" "|explode:displayName}

但是我还没有找到正确的方法。

我认为您希望获得结果,而不是在Smarty中使用对象语法(如果您想使用对象语法,您应该使用PHP而不是Smarty进行赋值)

所以你需要这样做:

{foreach from=$contacts key=k item=contact}
    {assign var="names" value=" "|explode:$contact->displayName}
    <span class="first-name">{$names[0]}</span>
    <span class="last-name">{$names[1]}</span>
{/foreach}
html源代码将与您期望的一样:

<span class="first-name">Name</span>
<span class="last-name">Surname</span>
<span class="first-name">Name2</span>
<span class="last-name">Surname2</span>
在Smarty文件中:

{foreach from=$contacts key=k item=contact}
    {assign var="names" value=" "|explode:$contact->displayName}

    {if $names|@count eq 2}
    <span class="first-name">{$names[0]}</span>
    <span class="last-name">{$names[1]}</span>
    {else}
        <span class="name-first-last">{$contact->displayName}</span>
    {/if}
{/foreach}
{foreach from=$contacts key=k item=contact}
{assign var=“names”value=”“|分解:$contact->displayName}
{if$names |@count eq 2}
{$names[0]}
{$names[1]}
{else}
{$contact->displayName}
{/if}
{/foreach}
这方面的输出将是:

<span class="first-name">Name</span>
<span class="last-name">Surname</span>        
<span class="name-first-last">Name2Surname2</span>
名称
姓
姓名2自选姓名2

我一直收到一个未定义的偏移量错误,因为其中一些没有名字和姓氏。我尝试了{if(array_key_exists($names[1],$contact->displayName))},但这不正确。你知道在没有名字和姓氏的情况下,我如何检查它以避免错误吗?
$contact = new stdClass();
$contact->displayName = 'Name Surname';
$contacts[] = $contact;
$contact = new stdClass();
$contact->displayName = 'Name2Surname2';
$contacts[] = $contact;
$smarty->assign('contacts',$contacts);
{foreach from=$contacts key=k item=contact}
    {assign var="names" value=" "|explode:$contact->displayName}

    {if $names|@count eq 2}
    <span class="first-name">{$names[0]}</span>
    <span class="last-name">{$names[1]}</span>
    {else}
        <span class="name-first-last">{$contact->displayName}</span>
    {/if}
{/foreach}
<span class="first-name">Name</span>
<span class="last-name">Surname</span>        
<span class="name-first-last">Name2Surname2</span>