有条件地改变foreach循环中使用的数组

时间:2014-06-26 07:25:38

标签: php loops foreach

我想有条件地改变使用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声明似乎并不承认&#39;从url检索的变量?它在循环之前的页面上打印,所以它显然可用吗?

4 个答案:

答案 0 :(得分:2)

它不起作用导致PHP,$_GET['myarray']是字符串而不是变量,即使它中有$。 您必须指定使用具有此字符串作为名称的变量。

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

$arrayused = ${$_GET['myarray']};

foreach($arrayused as $item) {
    // ...
}

答案 1 :(得分:1)

使用开关。

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

答案 2 :(得分:1)

如果我理解正确 - $ 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; ?>

答案 3 :(得分:1)

我只是发送带有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();

空数组(三元组的其他部分)可以是您喜欢的任何内容,但是像这样,您不必进行额外检查(例如:if($array_used == 'NOTFOUND') {}