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];
?>
==>一个
首先,如果这个问题已经发布和回答,我想原谅自己,但由于英语不是我的主要语言,我想我找不到或不知道正确的词来找到它.
所以我正在制定一个计划,它从一个已经制定的计划中获取数据,我想要一个 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];
?>
==>一个