Php 使用drupal的变量

Php 使用drupal的变量,php,drupal,variables,themes,cck,Php,Drupal,Variables,Themes,Cck,我正在制作drupal内容类型的主题,我有一组类似命名的变量。e、 g.场区1、场区2、…、场区10。我想在for循环中动态打印它们。通常情况下,可以通过执行以下操作单独打印值: 打印$field_anp_1[0]['value'] 就我而言,我不能这样做,因为最后一个数字改变了。那么,在for循环中,如何打印这些字段呢?我尝试了变量,但我似乎不太明白那里到底发生了什么-我不认为它喜欢数组中的这个事实。任何帮助都将不胜感激 我看不出有什么理由像这样生成无数个变量。但你可以这样收集它们: $var

我正在制作drupal内容类型的主题,我有一组类似命名的变量。e、 g.场区1、场区2、…、场区10。我想在for循环中动态打印它们。通常情况下,可以通过执行以下操作单独打印值: 打印$field_anp_1[0]['value']


就我而言,我不能这样做,因为最后一个数字改变了。那么,在for循环中,如何打印这些字段呢?我尝试了变量,但我似乎不太明白那里到底发生了什么-我不认为它喜欢数组中的这个事实。任何帮助都将不胜感激

我看不出有什么理由像这样生成无数个变量。但你可以这样收集它们:

$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]};

我看不出有什么理由产生这么多的变量。但你可以这样收集它们:

$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]};

绝对不是数组。但是您可以使用变量作为带有{..}的变量的名称

或者,如果您确定确实存在的变量将是连续的。您可以根据下面的注释在出现故障时停止:

#!/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});
}

绝对不是数组。但是您可以使用变量作为带有{..}的变量的名称

或者,如果您确定确实存在的变量将是连续的。您可以根据下面的注释在出现故障时停止:

#!/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});
}

好的,我知道了。我只是需要更具体地使用PHP。要从for循环中调用变量,如:$field_anp_0[0]['value'],其中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循环打印出一个主题表


谢谢你的帮助

好吧,我想出来了。我只是需要更具体地使用PHP。要从for循环中调用变量,如:$field_anp_0[0]['value'],其中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循环打印出一个主题表


谢谢你的帮助

这将设置检索变量的硬编码限制,据我所知,变量的数量可能会有所不同。此简短脚本旨在演示如何使用变量作为变量的名称。Drupal的确切应用程序需要比问题中提供的更详细的信息。如果变量列表是连续的,那么遍历它们直到isset为false就足以命中所有变量。这与我的想法一致。然而,当我试图实现它时,它并不起作用$field_anp_X的结构如下:$field_anp_1[0]['value']。出于某种原因,似乎有一个数组会引起问题。而且-变量实际上不是顺序的。但是,我所做的是创建一个带有结尾数字的数组。因此,我在for循环中使用$courses[$i],而不是$i。感谢您的代码,ghoti-它帮助我更好地理解变量。由于你的帖子,我能够在我的答案中找到代码。这将设置检索变量的硬编码限制,据我所知,变量的数量可能会有所不同。这个简短的脚本旨在演示如何使用变量作为变量的名称。Drupal的确切应用程序需要比问题中提供的更详细的信息。如果变量列表是连续的,那么遍历它们直到isset为false就足以命中所有变量。这与我的想法一致。然而,当我试图实现它时,它并不起作用$field_anp_X的结构如下:$field_anp_1[0]['value']。出于某种原因,似乎有一个数组会引起问题。而且-变量实际上不是顺序的。但是,我所做的是创建一个带有结尾数字的数组。因此,我在for循环中使用$courses[$i],而不是$i。感谢您的代码,ghoti-它帮助我更好地理解变量。因为你的帖子,我能够在我的答案中找到代码。谢谢你的回复-这个代码非常有用,但并不完全是我需要的。目前,我可以通过名称访问所有变量。e、 g.现在可以直接打印字段和P\U 1。但是,我正在尝试从for循环中打印它们。我实际做的是创建一个带有后缀的数组,我需要打印这些后缀。我的目标是
循环遍历该数组并打印$field\u anp\u$array[$x]变量。感谢更新的代码。我能弄明白,你的回答非常有用。我用drupal为其他有同样问题的人发布了一个答案——也许它会告诉你我到底在追求什么。我接受了。我建议的唯一更改是drupal开发人员。要使用变量访问$field_anp_123[0]['value'],他们需要执行以下操作:$var='field_anp_'$数组[$x];打印${$var}[0]['value'];谢谢你的回复-这段代码非常有用,但并不完全是我需要的。目前,我可以通过名称访问所有变量。e、 g.现在可以直接打印字段和P\U 1。但是,我正在尝试从for循环中打印它们。我实际做的是创建一个带有后缀的数组,我需要打印这些后缀。我的目标是循环遍历该数组并打印$field\u anp\u$array[$x]变量。感谢更新的代码。我能弄明白,你的回答非常有用。我用drupal为其他有同样问题的人发布了一个答案——也许它会告诉你我到底在追求什么。我接受了。我建议的唯一更改是drupal开发人员。要使用变量访问$field_anp_123[0]['value'],他们需要执行以下操作:$var='field_anp_'$数组[$x];打印${$var}[0]['value'];我还不完全清楚你想做什么。也许您可以包含一个经过编辑的表单版本,以及尽可能多的PHP代码?我还不完全清楚您想做什么。也许您可以包含表单的一个修订版本,以及您所掌握的PHP代码?