【问题标题】:Loop through variables with common name循环使用通用名称的变量
【发布时间】:2010-12-09 03:25:21
【问题描述】:

乍一看,我认为您可以得到我想要做的事情。我想遍历具有相同名称但带有数字前缀的变量。我对应该使用的循环类型也有些困惑,不确定“for”循环是否有效。唯一的事情是我无法理解 php 如何解释“动态”或虚构的变量。在输出带有美元符号的字符串时也遇到了一些麻烦。提前致谢!

$hello1 = "hello1";
$hello2 = "hello2";
$hello3 = "hello3";
$hello4 = "hello4";
$hello5 = "hello5";
$hello6 = "hello6";
$hello7 = "hello7";
$hello8 = "hello8";
$hello9 = "hello9";
$hello10 = "hello10";

for ( $counter = 1; $counter <= 10; $counter += 1) {
    echo $hello . $counter . "<br>";
}

【问题讨论】:

    标签: php


    【解决方案1】:

    这通常不受欢迎,因为它使代码更难阅读和理解,但实际上您可以使用一个变量的值作为另一个变量的名称:

    $foo = "bar";
    $baz = "foo";
    
    echo $$baz; // will print "bar"
    
    $foofoo = "qux";
    echo ${$baz . 'foo'}; // will print "qux"
    

    有关详细信息,请参阅variable Variables 上的 PHP 文档。

    但是,正如我已经提到的,这可能会导致一些非常难以阅读的代码。您确定不能只使用数组吗?

    $hello = array(
        "hello1",
        "hello2",
        // ... etc
    );
    
    foreach($hello as $item) {
        echo $item . "<br>";
    }
    

    【讨论】:

    • +1 以获得正确答案并清楚地解释为什么不使用它:)
    • 不是一个好主意,使用许多带有前缀等的变量,例如...... phpcs(php代码嗅探器)抱怨它。
    【解决方案2】:

    试试${"hello" . $counter}

    $a = "hell";
    $b = "o";
    $hello = "world";
    echo ${$a . $b};
    
    // output: world
    

    【讨论】:

      【解决方案3】:

      您可以将变量变量用作:

      for ( $counter = 1; $counter <= 10; $counter += 1) {
              echo ${'hello' . $counter } , '<br>';
      }
      

      【讨论】:

        【解决方案4】:

        我猜你甚至不需要声明 $hello1 = "hello1"。因为 $counter 通过它的循环递增数字。

        <?php 
        for ( $counter = 1; $counter <= 10; $counter += 1) {
        echo 'hello' . $counter . "\n";
        }
        ?>
        

        所以这足以得到你想要的输出。

        输出将是:-

        hello1
        hello2
        hello3
        hello4
        hello5
        hello6
        hello7
        etc...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-06
          • 2021-12-14
          • 2020-01-16
          • 2014-04-15
          • 2017-11-16
          • 1970-01-01
          • 2016-11-13
          相关资源
          最近更新 更多