2012-02-22 7 views
2

drupal 콘텐츠 유형을 주제로하고 있으며 비슷한 이름의 변수 집합이 있습니다. 예 : field_anp_1, field_anp_2, ..., field_anp_10. for 루프에서 동적으로 인쇄하고 싶습니다. 일반적으로 다음과 같이하여 값을 개별적으로 인쇄합니다. print $field_anp_1[0]['value'];drupal을 사용한 가변 변수

내 경우에는 마지막 번호가 변경되기 때문에이 작업을 수행 할 수 없습니다. 따라서 for 루프 내에서이 필드를 어떻게 인쇄 할 수 있습니까? 나는 가변 변수를 시도했지만, 그곳에서 무슨 일이 일어나는지 정확히 이해하지 못하는 것 같아요. 그리고 배열에서이 사실을 좋아하지 않는다고 생각하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

나는 아직도 당신이하려는 것을 분명히하지 못했습니다. 아마도 폼의 수정 된 버전과 PHP 코드를 포함 할 수있을 것입니다. – ghoti

답변

0

좋아, 알아 냈어. 필자는 PHP에 좀 더 구체적으로 설명 할 필요가있었습니다. 변수와 같은 호출하려면 :

<?php 
$numbers = array(123,235,12332,2342); 

for($i; $i<count($numbers); $i++){ 
    $var = "field_anp_".$numbers[$i]; 
    printf("%s\n", ${$var}[0]['value']); 

} 
?> 

이것은 제가 인쇄 한해야하는 필드를 나열 할 수 있습니다 : 0이 증가 루프, 대한 내에서 $field_anp_0[0]['value']하는 사람은 단순히 다음을 수행 할 필요가 순서대로 인쇄해야합니다. 그런 다음 for 루프를 사용하여 예를 들어 테마 테이블을 인쇄 할 수 있습니다.

도움 주셔서 감사합니다.

2

이렇게 생성 된 변수의 수가 많지 않은 이유는 없습니다. 그러나 이것은 당신이 그들을 수집 할 수있는 방법입니다 :

$vars = array(); 
foreach(get_defined_vars() as $name => $value) { 
    if(strpos($name, 'field_anp_') === 0) { 
     $vars[$name] = $value; 
    } 
} 

지금 당신이 $vars에서 연관 배열로 값을 가질 것이다. $vars에 값을 추가하는 대신 직접 인쇄 할 수 있습니다. 귀하의 코멘트 확실히

$array = array('foo' => 'bar'); 
$x = 'foo'; 
$field_anp_bar = 'baz'; 
echo ${'field_anp_' . $array[$x]}; 
+0

답장을 보내 주셔서 감사합니다.이 코드는 매우 유용하지만 꼭 필요한 것은 아닙니다. 현재 모든 변수에 이름으로 액세스 할 수 있습니다. 예 : 이제 field_anp_1을 직접 인쇄 할 수 있습니다. 그러나 for 루프 내에서 인쇄하려고합니다. 제가 실제로 한 것은 인쇄해야 할 접미어가있는 배열입니다. 내 목표는 해당 배열을 반복하고 $ field_anp_ $ 배열 [$ x] 변수를 인쇄하는 것입니다. – Andrew

+0

@Andrew 업데이트 된 코드를 사용해 주셔서 감사합니다. – Vitamin

+0

감사합니다. 나는 그것을 이해할 수 있었고 당신의 대답은 매우 유용했습니다. 나는 drupal을 사용하여 같은 문제를 가진 다른 사람들에게 답을 올렸습니다. 아마도 내가 정확히 무엇을했는지를 보여줄 것입니다. – Andrew

2

하지 배열에 대응

업데이트. 당신이 변수가 순차적 될 것입니다 존재한다는 것을 확신한다면 당신은 {..}

[email protected]:~ $ cat invar.php 
#!/usr/local/bin/php 
<?php 

$field_anp_3="three"; 
$field_anp_2="two"; 

for ($i=1; $i<5; $i++) { 
    $thisvar="field_anp_" . $i; 
    if (isset(${$thisvar})) { 
    printf("%s: %s\n", $i, ${$thisvar}); 
    } else { 
    printf("%s: not set\n", $i); 
    } 
} 

[email protected]:~ $ ./invar.php 
1: not set 
2: two 
3: three 
4: not set 

다른 방법으로 변수의 이름으로 변수를 사용할 수 있습니다. 당신은 실패 할 때 멈출 수 있습니다 (아래의 설명에 따라) :

#!/usr/local/bin/php 
<?php 

$field_anp_1="one"; 
$field_anp_2="two"; 
$field_anp_3="three"; 

for ($i=1; $i<5; $i++) { 
    $thisvar="field_anp_" . $i; 
    if (!isset(${$thisvar})) { 
    break; 
    } 
    printf("%s: %s\n", $i, ${$thisvar}); 
} 
+0

변수의 수가 이해할 수있을 때, 검색된 변수의 하드 코드 된 한계를 설정합니다. – Vitamin

+0

이 짧은 스크립트는 변수 이름으로 변수를 사용하는 방법을 보여주기위한 것입니다. 드루팔 (Drupal의 정확한 응용 프로그램은 질문에 제공된 것보다 더 자세한 내용을 필요로합니다. 변수 목록이 순차적이라면,'isset()'이 false가 될 때까지 그것들을 걷는 것으로 충분할 것입니다. – ghoti

+0

이것은 내가 생각하고있는 라인을 따른 것입니다. 그러나 구현하려고하면 작동하지 않습니다. $ field_anp_X는 다음과 같이 구성됩니다. $ field_anp_1 [0] [ 'value']. 웬일인지, 배열을 가지고있는 것이 문제를 일으키는 것 같습니다. – Andrew

관련 문제