提问人:user26676 提问时间:3/20/2014 最后编辑:user26676 更新时间:3/20/2014 访问量:713
foreach 循环中的 PHP 变量变量不起作用
PHP variable variables in a foreach loop aren't working
问:
如果我能让它工作,这是一个绝妙的小技巧 - 我有来自数十个表的数百个数据列,分布在十几个数据表单中(它们是 HTML 打印表单),它们都是带有嵌入式 php 变量的 html。很正常。但是,客户需要知道哪个字段进入了哪里 - 这是一个很好的问题。
那我做了什么?我研究了一个解决方案,允许数据库中的键数组放弃它们的列名。绝妙的举动!除了我需要通过变量来做到这一点,你猜怎么着,它们不能在 foreach 循环中工作。
代码如下
if ($_REQUEST['data']=="false"){
$supera = array("RowService", "RowSite", "RowCustomer", "RowEngineer"); //there can be many of these they are key'd arrays $RowService['column_name_1']; is the format
foreach($supera as $super){
foreach(${$super} as $key=>$value){
if (!is_numeric($key)){
${$super}[$key] = "<span style=\"color:pink;\">".$key."</span>";
}
}
}
}
正如你所看到的,我想要一个终止开关的简单机制来剪切和粘贴键数组,这些数组不再显示真实数据,而是显示(粉红色)列名,(也许)表名。已经有很多代码,如果它可以工作,这将是一个绝妙的选择
编辑:这是PHP错误:
Warning: Invalid argument supplied for foreach()
编辑:代码实际上已经起作用:修复是测试is_array()
if(is_array(${$super})) foreach(${$super} as $key=>$value){
会起作用,而不仅仅是
foreach(${$super} as $key=>$value){
答:
0赞
Niet the Dark Absol
3/20/2014
#1
就我个人而言,我发现变量是一个非常糟糕的主意。有几种方法可以解决它。
例如:
$process = array(&$RowService,&$RowSite,&$RowCustomer,&$RowEngineer);
foreach($process as $p) {
foreach($p as $k=>$v) {
$p[$k] = "<span style=\"color:pink\">".$v."</span>";
}
}
使用引用意味着您可以影响原始变量。
如果上述方法不起作用(我对参考 XD 不是很好),请尝试以下操作:
$process = array($RowService,$RowSite,$RowCustomer,$RowEngineer);
foreach($process as $p) {
foreach($p as $k=>$v) {
$p[$k] = "<span style=\"color:pink\">".$v."</span>";
}
}
list($RowService,$RowSite,$RowCustomer,$RowEngineer) = $process;
评论
0赞
user26676
3/20/2014
你是对的,使用指针可能是正确的方法,我对它们非常熟悉,你是对的。&$
0赞
user26676
3/20/2014
第一个不起作用 - 被相同的错误消息轰炸 - 一定是 foreach 逻辑中的 PHP 故障,或者(然而它只是发生在我身上,遵循完全不同的思路)也许这是一个误解 - 这是我在循环中分配 while 的结果$val[$key]
1赞
slash197
3/20/2014
#2
我不确定你想实现什么,但你的代码(简化)工作得很好:
$a = array("asd", "qwe");
$asd = array("a" => 1, "b" => 2, "c" => 3);
$qwe = array("d" => 4, "e" => 5, "f" => 6);
foreach ($a as $item)
{
foreach ($$item as $key => $value)
{
echo $key . ": " . $value . "<br />";
}
}
输出:
a: 1
b: 2
c: 3
d: 4
e: 5
f: 6
很可能你的一个变量是空的(不是数组),这就是你收到该警告的原因。
评论
0赞
user26676
3/20/2014
是的,你是对的,在嵌套的foreach前面添加,做到了if(is_array(${$super}))
0赞
user26676
3/20/2014
顺便说一句,这是一个地狱般的把戏。意味着无数的打印表单可以打印/打印他们使用的字段名称,而不是里面的数据。这么一点点的想法就取得了巨大的胜利。意味着用户不会猜测哪个字段是什么,即他们可以点击帮助按钮。所以代码不受影响
0赞
payal
3/20/2014
#3
As per my understanding of your requirement.
If you want to get table name with pink color then you just need to use below code
$supera = array("RowService", "RowSite", "RowCustomer", "RowEngineer"); //there can be many of these they are key'd arrays $RowService['column_name_1']; is the format
$super = array();
foreach($supera as $key=>$value){
if (!is_numeric($value)){
$super[$value] = "<span style=\"color:pink;\">".$value."</span>";
}
}
print_r($super);
评论