【问题标题】:conditionally change array used in foreach loop有条件地更改 foreach 循环中使用的数组
【发布时间】:2014-06-26 07:25:38
【问题描述】:

我想通过 foreach 循环有条件地更改循环的数组并发送 var in

Url = domain.com/myphppage.php?myarray=$array1

脚本有两个数组。此外$_GET 用于从 url 获取 var,最后是 foreach 循环,该循环使用两个数组之一将数组内容输出到页面上。

    <?php 
    $array1 = array(1,2,3,4)
    $array2 = array(5,6,7,8)
    ?>

    <?php 
    $arrayused = $_GET['myarray'];
    echo $arrayused; 
    ?>

    <?php foreach($arrayused as $item): ?>
     some html code to show loop values
    <?php endforeach; ?>

var 通过 url 传递,因为它在页面上显示为 echo $arrayused 的输出。

我期望$arrayused 变量也将被foreach 拾取并循环通过变量中的两个数组中的任何一个。

但是,它不会获取变量,也不会进入foreach 循环。如果我将两个数组名称中的任何一个硬编码到 foreach 语句中,那么 foreach 循环就可以正常工作。

为什么 foreach 语句似乎不能“识别”从 url 检索到的变量?它在循环之前的页面上打印,所以它显然是可用的?

【问题讨论】:

    标签: php loops foreach


    【解决方案1】:

    它不起作用,因为对于 PHP,$_GET['myarray'] 是一个字符串而不是一个变量,即使它里面有一个 $。 您必须指定使用具有此字符串作为名称的变量。

    所以,你可以像这样使用你的数组:

    $arrayused = ${$_GET['myarray']};
    
    foreach($arrayused as $item) {
        // ...
    }
    

    【讨论】:

    • 另外,如果想将数组打印为字符串,那么serialize 的使用可能是一种好方法,而不是 ECHO。
    • 啊,好吧,我以为它会解释为变量。这就是答案,虽然我无法得到你的 ${$_GET['myarray']};符号工作。不过,下面建议的双 '$$' Sergey 确实对我有用。
    • 我还应该补充一点,我需要修改 url 以从传递的变量中删除 '$',例如从 'myphppage.php?myarray=$array1' 到 myphppage.php?myarray=array1
    【解决方案2】:

    如果我理解正确 - $arrayused 是一个可以是“array1”或“array2”的字符串。

    你应该在变量的开头添加额外的 $ (Variable Variables)。

    这是代码示例:

    <?php
    $array1 = array(1,2,3,4);
    $array2 = array(5,6,7,8);
    ?>
    
    <?php
    $arrayused = 'array1';
    echo $arrayused;
    ?>
    
    <?php foreach($$arrayused as $item): ?>
        some html code to show loop values
    <?php endforeach; ?>
    

    【讨论】:

    • Sergey 有更多的最终答案给了我对我有用的'$$'。谢谢。
    【解决方案3】:

    使用开关。

    switch($_GET['myarray']) {
    case '$array1':
        $arrayused = $array1;
        break;
    case '$array2':
        $arrayused = $array2;
        break;
    }
    

    【讨论】:

      【解决方案4】:

      我只需发送带有 URL 的密钥,然后您就可以立即插入密钥,而不必做花哨的技巧。试试这样:

      // URL: http://www.domain.com/page.php?myarray=1
      $my_arrays = array(
          1 => array(1, 2, 3, 4),
          2 => array(4, 5, 6, 7)
      );
      
      $array_used = $my_arrays[$_GET['my_array']];
      foreach($array_used as $item) {
          // do stuff with the array
      }
      

      如果你想更安全一点,或者想防止错误,请像这样抓取数组:

      $array_used = array_key_exists($_GET['my_array'], $my_arrays) 
              ? $my_arrays[$_GET['my_array']] 
              : array();
      

      空数组(三元组的“else”部分)可以是任何你喜欢的东西,但是像这样你不需要做额外的检查(比如:if($array_used == 'NOTFOUND') {})

      【讨论】:

      • 谢谢 没想到数组数组。
      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 2017-09-16
      • 2015-08-02
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2019-03-09
      相关资源
      最近更新 更多