2014-09-16 5 views
1

displayName을 사용하여 PHP 배열의 객체를 정렬하고 멋진 템플릿에 사전 순으로 출력하는 방법은 무엇입니까? usort를 사용알파벳순 배열 객체 배열

<div class="container"> 
    <ul class="alpha-nav"> 
     <li><a href="#A">A</a></li> 
     <li><a href="#B">B</a></li> 
     ... 
    </ul> 

    <div class="content-holder"> 
     <div id="A">A</div> 
     <ul class="content thumbnails"> 
      {foreach from=$contacts key=k item=contact} 
      <li> 
      {if ($contact->displayName !== '')} 
       {$contact->displayName} 
      {else} 
       {$contact->email} 
      {/if} 
      </li> 
     </ul> 
     <div id="B">B</div> 
     <ul class="content thumbnails"> 
      {foreach from=$contacts key=k item=contact} 
      <li> 
      {if ($contact->displayName !== '')} 
       {$contact->displayName} 
      {else} 
       {$contact->email} 
      {/if} 
      </li> 
     </ul> 
     ... 
    </div> 
</div> 

<script> 
    var scrollSpeed = 500, 
     ease = 'easeOutCubic' 

    $('ul.alpha-nav a').click(function() { 

     var id = $(this).attr('href'); 
     $('.content-holder').css('overflow', 'visible'); 
     var offset = $(id).offset().top - 40; 
     $('.content-holder').css('overflow', 'hidden'); 
     $('.content-holder').animate({ scrollTop: offset},scrollSpeed,ease); 
     return false; 
    }); 
</script> 
+1

유식의 연관 배열을 통해 루프가 다음 사용 'natsort ($ 배열);''$ objectOrder = array_keys ($ array);'. – PHPglue

답변

1

첫 번째 정렬 연락처 ..

<div id="choose-contacts" class="container"> 
    <div class="info"> 
     <ul class="thumbnails"> 
     {foreach from=$contacts key=k item=contact} 
      <li class="span3"> 
       <input type="checkbox" id="{$contact->identifier}"> 
       <div class="thumbnail"> 
        <div class="row-fluid team"> 
         {if isset($contact->photoURL)} 
         <img src="{$contact->photoURL}" onclick="toggle('{$contact->identifier}')"/> 
         {else} 
         <img src="{$img_dir}avatar.jpg" onclick="toggle('{$contact->identifier}')" /> 
         {/if} 
        </div> 
        <div class="row-fluid"> 
         <h3> 
          {if ($contact->displayName !== '')} 
           {$contact->displayName} 
          {else} 
           {$contact->email} 
          {/if} 
         </h3> 
        </div> 
       </div> 
      </li> 
     {/foreach} 
     </ul> 
    </div> 
</div> 

을하지만 지금은 알파벳 인덱스를 수정하고 싶습니다 :

if(Tools::getValue("action") == "contacts") { 
    $config = _PS_CLASS_DIR_ . 'hybridauth/config.php'; 
    require_once(_PS_CLASS_DIR_ . "hybridauth/Hybrid/Auth.php"); 

    $serviceProvider = Tools::getValue("service"); 
    $hybridauth = new Hybrid_Auth($config); 
    $service = $hybridauth->authenticate($serviceProvider); 
    $contacts = $service->getUserContacts(); 

    if (is_array($contacts)){ 
     self::$smarty->assign('contacts', $contacts); 
     self::$smarty->display(_PS_THEME_DIR_.'addressbook.tpl'); 
    } 
    $service->logout(); 
    die(); 
} 

나는이 같은 목록을 출력했다 결합 배열을 사용하여 displayName의 첫 번째 문자로 버킷으로 분리하십시오.

$contacts = $service->getUserContacts(); 
if (is_array($contacts)){ 
    usort($contacts,function($a,$b) { return strcmp($a->displayName,$b->displayName);}); 
    $contactsByLetter = array(); 
    foreach($contacts as $contact) { 
     $contactsByLetter[$contact->displayName[0]][] = $contact->displayName; 
    } 
    self::$smarty->assign('contactsByLetter', $contactsByLetter); 
    self::$smarty->assign('contacts', $contacts); 
    self::$smarty->display(_PS_THEME_DIR_.'addressbook.tpl'); 
} 

다음 당신은 객체를 통해 반복하고 배열로 정렬 기준으로 사용할 속성을 저장하여 각 개체의 각 속성을 얻어야한다

{foreach from=$contactsByLetter key=letter item=contacts} 
    <div id="{ letter }">{ letter }</div> 
    <ul class="content thumbnails"> 
     {foreach from=contacts key=k item=contact} 
     <li> 
     {if ($contact->displayName !== '')} 
      {$contact->displayName} 
     {else} 
      {$contact->email} 
     {/if} 
     </li> 
     {/foreach} 
    </ul> 
{/foreach}