【问题标题】:Variable variables to call programmatically-created arrays用于调用以编程方式创建的数组的变量变量
【发布时间】:2009-08-17 18:20:45
【问题描述】:

我正在内容管理系统中从模板标签创建一系列数组,并将这些数组的标题输出为带有变量标记的数组:

<Loop>

$<GeneratedArrayName1> = array( "foo" => "bar" );

$<GeneratedArrayName2> = array( "foo" => "bar" );

</Loop>

我还生成了另一个可能的 GeneratedArrayNames 数组并按计数对其进行排序。我正在遍历这个数组以获取 GeneratedArrayNames,因此我可以有选择地显示它们。排序后,我只想拉出并显示我使用 GeneratedArrayNames 拥有的众多数组中的几个。我通过将指针定位在主数组的顶部并获取名称来做到这一点:

reset($ArrayNames);
$firstArray = current($ArrayNames); //outputs GeneratedArrayName1

然后我通过获取Variable变量来拉取GeneratedArrayName,这给了我一个错误:

print_r(${$firstArray}); // outputs Undefined variable: GeneratedArrayName1

但是当我硬编码时,我得到了正确的数据:

print_r($GeneratedArrayName1); // outputs the array

我哪里错了?

编辑

我通过这个循环得到$firstArray

$count = 0;
foreach($ArrayNames as $ArrayCount => $ArrayName) {

$count++;
echo "$ArrayName" . ' - ' . "$ArrayCount" . '<br>';

if ($count >= 3) {
    break;
    }

} //from here I proceed to reset($ArrayNames)

【问题讨论】:

    标签: php arrays variables


    【解决方案1】:

    尝试$$firstArray 而不是${$firstArray}

    【讨论】:

      【解决方案2】:

      这段代码运行良好:

      $foo=array(3,2,1);
      $foostr="foo";
      print_r(${$foostr});
      

      这正是您正在做的事情。您的代码中一定有错误。不知何故,$GeneratedArrayName1 不会在您的语句尝试打印它时生成。

      尝试检查输入变量 - 确保它的开头或结尾没有空格。 trim()如果你必须的话。

      如果这些都不起作用,请在您的帖子中编辑产生此错误的最少量代码(完整),我们将对其进行查看。

      【讨论】:

      • 当我将 $firstArray 更改为字符串时它起作用了,但 $firstArray 是我用 current() 拉取的数组中的一个值。有没有办法让 PHP 将其视为普通字符串?
      • print_r $firstArray 只是为了仔细检查。
      • print_r($firstArray) 输出GeneratedArrayName1,而不是数组内容。
      • current() 返回的值应该是一个字符串。 PHP 确实没有理由将其解释为其他任何内容。哦,另外,不需要调用 current()。reset() 将返回第一个元素,所以调用 current() 是多余的。
      • 试试 $firstArray=(string)reset($ArrayNames);
      【解决方案3】:

      您不使用多维数组是否有原因?恕我直言,这种语法比变量变量要清晰得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-07
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多