2010-07-17 3 views
4

첫 번째 타이머 여기 객체의 임시 배열을 생성 m 일반 페이지 또는 해당 페이지의 개별 장소와 관련된 메모의 글 머리표 목록을 표시하는 페이지 섹션에서 작업합니다. 일부 장소에는 메모가 없습니다. 뭔가 같은 :PHP는/스마티는 -</p> <p>PHP/스마티, 나는 '... 내가이 충분히 설명 희망, 어떻게 특정 값을 가진 개체의 배열을 확인하고,

일반

  • 주 1

뉴욕

  • 주 2
  • 주 3

보스턴

  • 주 4

나는 두 UI 클래스에 의해 내가 함께 일하고 있어요 .tpl에 할당하고 채워 배열 있습니다 : $ 장소와 $ 노트

$ places에는 place_id별로 고유 한 장소 개체가 포함되어 있습니다.

{if (**ANY NOTES EXIST IN $notes WITH NO place_id**)} 
    <ul id="list-general"> 
     <h4>General</h4> 
     {foreach from=**[NOTES WITH NO place_id]** item=note} 
      <li id="note-{$note->get_id()}">$note->get_text()</li> 
    {/foreach} 
    </ul> 
{else} 
    <ul id="list-general" class="hide"> 
     <h4>General</h4> 
    </ul> 
{/if} 

{foreach from=$places item=place} 
    {assign var=curr_place_id value=$place->get_id()} 
    {if (**ANY NOTES EXIST IN $notes WHERE place_id == $curr_place_id**)} 
    <ul id="list-{$curr_place_id}"> 
      <h4>{$place->get_name()}</h4> 
      {foreach from=**[NOTES WHERE place_id == $curr_place_id]** item=note} 
       <li id="note-{$note->get_id()}">$note->get_text()</li> 
     {/foreach} 
     </ul> 
    {else} 
     <ul id="list-{$curr_place_id}" class="hide"> 
      <h4>{$place->get_name()}</h4> 
     </ul> 
    {/if} 
{/foreach} 

나는 꽤 새로운 해요 : 또는 속성 여기

중 하나로서 place_id있을 수도 있고 없을 수도 있습니다 각각의 고유 식별 노트 개체를 포함 10 $ 노트, 내가 생각하고 무엇을 이 모든, 그리고 항목에 힘든 시간을 보내고있어 CAPS ... 그래서, 내 질문은 : 두 가지 다른 배열에서 개체의 특성을 평가하고 가능한 임시 배열을 빌드하는 가장 좋은 방법은 무엇입니까 내가 필요로하는 음표 만 포함하고 있습니다.

나는 그것을 할 수 있습니다 같은데요 동안

답변

2

을 (경우에 당신이 궁금해하는, 내가 자바 스크립트를 통해 액세스 할 수 있습니다 주문에 대해 걱정할 필요가 없습니다 숨겨진 노드를 만드는거야) 이것은 Smarty에서 비즈니스 로직과 프리젠 테이션 로직을 여기에 섞어 놓은 것처럼 보입니다. 개인적으로, 나는이 템플릿을 호출하는 PHP에서 두 부분 (일반 및 장소)으로 배열을 연결하는 것을 고려할 것입니다.

$placesNotes = array(); 
$generalNotes = array(); 

array_filter($notes, function($note) { 
    global $placesNotes, $generalNotes; 
    if($note->get_place_id() == null) { 
     $generalNotes[] = $note; 
    } else { 
     $placesNotes[$note->get_place_id()][] = $note; 
    } 
}); 

(참고 :이 익명 함수를 사용하므로> 5.3 만 - 당신은이 콜백 유형을 이전 버전에서 실행이 자신의 것에라는 이름의 기능을 기능을 이동하고 사용하려는 경우)

에게 당신을 Places 루프 내에서 isset ($ notes_places. $ curr_place_id)를 사용하여 장소에 노트가 있는지 알아보기 위해 쉽게 반복 할 수있는 두 개의 배열로 끝납니다.

또한 get_text() 호출에서 {}이 (가) 깜빡입니다.

빠른 샘플을 채우고 : http://gist.github.com/479392에서 찾을 수 있습니다. 도움이 되셨습니까?

BTW : 귀하의 질문은 매우 분명하고, 당신이하고 싶은 일을 설명하고, 즉각적으로 명확하지 않았을 때 무엇을했는지에 대한 세부 사항을 자세히 설명하기도합니다.

+0

감사합니다 kander는 의미가 있습니다. 오늘 아침에 그걸 쐈어. – byron

+0

은 매력처럼 작동합니다. 참고로, 저는 arrayfilter 대신 PHP에서 foreach를 사용했습니다. 그냥 arrayfilter가 작동하지 않습니다. 도와 주셔서 정말로 고맙습니다. – byron

+0

당신은 환영합니다 :) – kander