2010-11-23 7 views
1

멋진 배열의 값을 기준으로 확인란을 선택하려고합니다. 내 PHP에서Smarty가 array_search를 사용하여 선택된 확인란을 선택했습니다.

$smarty->assign('locations_array',array(4,6,9,7)); 

나는 배열을 통해 검색 할하고있는 경우 일치는 확인란을 선택합니다. 여기 내 템플릿에서 시도한 것이지만 작동하도록 할 수는 없습니다. array_search에 필요한 바늘과 건초 더미를 어떻게 전달할 수 있는지 잘 모르겠습니다.

{foreach $locations as $x} 
    {if $x.id == $x.id|@array_search:$locations_array} 
    <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label> 
    {else} 
    <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label> 
    {/if} 
{/foreach} 

사용자 정의 기능을 만들지 않고도 가능합니까?

+0

는 내가이 작업을 찾은 것 같아 {경우 $ x.id | array_search : $의 locations_array을}는 것은 배열하고 그 배열이 함수 뒤에 pased되면 @에만 사용됩니다 – andrew

+0

. 대신 : 문제는 마지막 상자가 locations_array – andrew

+0

앤드류의 id의 일치 위치 ID 년대에도 불구 확인되고 있다는 점이다 {$ x.id 경우 | array_search : $의 locations_array}, 항상 사용합니다 : { if $ x.id | array_search : $ locations_array! == false} 그렇지 않으면 $ x.id가 배열의 키 0에서 발견되면 원하지 않을 때이 if-test가 실패합니다. 여기 경고를 참조하십시오 : http://php.net/manual/en/function.array-search.php –

답변

1

템플릿에서 함수에 두 개의 변수를 전달할 수 있는지 여부는 모르겠지만이 질문은 PHP 파일 $locations 대신 새 배열을 만들어 피할 수 있습니다. 게시 된 코드를 보면 각 요소에 title, idchecked의 세 하위 요소가 있어야합니다. 이렇게하면 템플릿 측면의 배열을 비교하지 않아도되며 사용자 정의 함수를 작성하지 않아도됩니다.

+0

상자가 선택되지 않았는지 여부는 개인 환경 설정에 따라 다르므로 특정 사용자를 확인하거나 선택해야합니다. – andrew

+0

괜찮습니다. PHP 파일에서 어떤 사용자를 다루고 있는지를 알아야하므로 '$ smarty-> display()'를 호출하기 전에 해당 사용자에 대한 맞춤 배열을 만들 수 있습니다. – eykanal

+0

:) 위 또는 아래로 투표하지 않고 그냥 남길 수 있습니다. 투표는 권장되지만 선택 사항입니다. – eykanal

1

참고로 array_search를 사용할 때 이것이 올바른 구문이라고 생각합니다.

{if $x.id|array_search:$locations_array} 

여기서 $ x.id는 바늘이고 $ locations_array는 배열 haystack입니다.
나는 eknals 피드백을 기반으로 다른 접근법을 결정했다.

0

나는 array_search와 함께 작동하지 않았지만 몇 가지 간단한 해결책을 가지고있다. foreach 루프의 locations_array를 사용하여 확인란 값을 확인할 수 있습니다.

**$i = 0;** 
     {foreach $locations as $x} 
      **{if $x.id == $locations_array[$i]}** 
      <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label> 
      {else} 
      <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label> 
      {/if} 
**$i++;** 
     {/foreach} 
관련 문제