我想有条件地改变使用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检索的变量?它在循环之前的页面上打印,所以它显然可用吗?
答案 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') {}
)