PHP - 在 for 语句中使用数组中的变量

PHP - using variables in arrays in a for statement

首先,如果这个问题已经发布和回答,我想原谅自己,但由于英语不是我的主要语言,我想我找不到或不知道正确的词来找到它.

所以我正在制定一个计划,它从一个已经制定的计划中获取数据,我想要一个 if 语句中的 for 循环来循环一个由一天定义的数组。我当前的代码:

if($hoursandminutes >= 1435 && $hoursandminutes < 1520) {
    for ($x = 1; $x <= 2; $x++) {
        $p2a1 = "property$x";
        $p2a11 = $results->results->collection1[8]->$p2a1;
        echo "$p2a11 <br>";
    }
}

所以我相信这是不言自明的,并且它按应有的方式工作。但问题是索引的 "collection" 数组包含一周中不同日期的数据,例如 collection1[0],collection1[1] 包含我们在星期一的第一个和第二个主题的数据和 collection2[0], collection2[1] 一样,不过是星期二。所以我想做的是:

$p2a11 = $results->results->collection1[8]->$p2a1;

部分,但 "collection" 数组取决于日期。 这是我目前拥有的,但它不起作用:

$day = date('w');
$dantest = "collection$day";

if($hoursandminutes >= 1400 && $hoursandminutes < 1800) {
    for ($x = 1; $x <= 2; $x++) {
        $p2a1 = "property$x";
        $p2a11 = $results->results->$dantest[0]->$p2a1;
        echo "$p2a11 <br>"; 
        echo $dantest;
    }
}

但它什么也没做。如果我尝试回显 $dantest ,它也在函数中用于测试目的,它会回显 "collection1" 两次,因为语句循环两次,今天是星期一 ... 我应该在 $dantest 变量中写什么才能正确选择数组?

提前致谢。 真挚地, 雷祖

由于$dantest是一个字符串,

$dantest[0]

returns 该字符串的第一个字符,因此

$results->results->$dantest[0]

评估为

$results->results->c

要解决此问题,请设置中间变量:

$p2a11tmp = $results->results->$dantest;
$p2a11 = $p2a11tmp[0]->$p2a1;

或用{}包围dantest:

$p2a11 = $results->results->${dantest}[0]->$p2a1;

表达式

 $p2a11 = $results->results->$dantest[0]->$p2a1;

$dantest[0] 评估为一个数组并检索第一个元素(即 'c',"collection" 的第一个字符,因此不会给出错误)。

你要的是

 $p2a11 = $results->results->${$dantest}[0]->$p2a1;

其中 $dantest 首先解析,然后表达式的其余部分将被解释。

证明:

<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");

echo $dantest[0];
?>

==> "m"

<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");

echo $$dantest[0];
?>

==> PHP 注意:未定义变量:m in - on line 5

<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");

echo ${$dantest}[0];
?>

==>一个