Переменные с помощью drupal - PullRequest
       22

Переменные с помощью drupal

2 голосов
/ 22 февраля 2012

У меня есть тип контента drupal, и у меня есть набор одноименных переменных. например field_anp_1, field_anp_2, ..., field_anp_10. Я хочу динамически распечатать их из цикла for. Обычно можно распечатать значения по отдельности, выполнив что-то вроде: print $field_anp_1[0]['value'];

в моем случае я не могу этого сделать, потому что последний номер меняется. Итак, как в цикле for можно распечатать эти поля? Я пробовал переменные переменные, но я не совсем понимаю, что там происходит, и я не думаю, что ему нравится тот факт, что это в массиве. Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Определенно не массив.Но вы можете использовать переменную в качестве имени переменной с {..}

ghoti@pc:~ $ 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);
  }
}

ghoti@pc:~ $ ./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});
}
2 голосов
/ 23 февраля 2012

Я не вижу причин для того, чтобы сгенерировать такое количество переменных.Но вот как вы можете их собрать:

$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 голосов
/ 23 февраля 2012

Хорошо, я понял это.Мне просто нужно быть более конкретным с PHP.Чтобы вызвать такую ​​переменную, как: $field_anp_0[0]['value'] из цикла for, где 0 увеличивается, нужно просто сделать следующее:

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

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

}
?>

Это позволит мне перечислить поля, которые мне понадобятсячтобы распечатать в порядке, мне нужно распечатать их.Затем я могу использовать цикл for для распечатки тематической таблицы, например.

Спасибо за помощь!

...