foreach循环中的PHP变量变量不起作用

时间:2014-03-20 10:27:08

标签: php foreach variable-variables

这是一个很棒的小技巧,如果我可以让它工作 - 我有数十个数据列,分布在十几个数据表格中的数十个表格(它们是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){

3 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标,但您的代码(简化版)运行良好:

$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

很可能你的一个变量是空的(不是数组),这就是你收到警告的原因。

答案 1 :(得分:0)

就个人而言,我发现变量变量是一个非常糟糕的主意。它有几种方法。

例如:

$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;

答案 2 :(得分:0)

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);