下面我试图解析一个关联数组。
数组看起来像:
$array1 = [Date1 => Time1, Date2 => Time2, Date3 => Time3,……..]
这里,当我解析数组时,我想对数组的每两个元素执行操作。即Date1Time1与Date2Time2,Date3Time3与Date4Time4进行比较,依此类推。
所以下面我使用while循环解析数组并将值传递给函数creating_detailed_array()
。
while (list($var, $val) = each($array1)) {
if($GLOBALS['counter'] < 4) {
creating_detailed_array($var,$val);
} else {
$GLOBALS['counter'] = 1;
creating_detailed_array($var,$val);
}
}
假设1:我已将$GLOBALS['counter']
定义为值为1的全局计数器
Assumption2:这里Date1,Time1,Date2,Time2是我在PHP页面顶部定义的变量,考虑到全局范围如下。
以下是被叫函数:
//Global Variables
$Date1 = "";
$Time1 = "";
$Date2 = "";
$Time2 = "";
function creating_detailed_array(&$var,&$val)
{
//Below I am creating variable named Var1 and Var2 dynamically to store the values of Date1 and Time1 and so on
${'Var' . $GLOBALS['counter']} = $var;
${'Var' . ($GLOBALS['counter'] + 1)} = $val;
if($GLOBALS['counter'] = 1) {
//Trying to store the values in the global variables Date1 and Time1 for future use
$GLOBALS["Date1"] = $Var1;
$GLOBALS["Time1"] = $Var2;
} else {
//Trying to save the values in global variables Date2 and Time2 for future use.
$GLOBALS["Date2"] = $Var3;
$GLOBALS["Time2"] = $Var4;
}
echo '<br> Value of Variable 1 : ' . $GLOBALS["Date1"] . 'Value of Variable 2 : ' . $GLOBALS["Time1"] . 'Value of Variable 3 : ' . $GLOBALS["Date2"] . 'Value of Variable 4 : ' . $GLOBALS["Time2"] . '<br>';
$GLOBALS['counter'] = $GLOBALS['counter'] + 2;
}
现在的问题是,当解析第一次进入代码时,我得到了正确的值存储在Date1和Time1中,当循环解析值为Date2和Time2时,则Date1和Time1的值被设置为空值。
因为我想将Assoc数组的第一个元素与第二个,第三个与第四个进行比较,依此类推。
我希望将Date1和Time1以及Date2和Time2值存储在变量中以供将来用于比较。但是对于每个解析,我得到了一对中的任何一个。
我怀疑我错误地分配了全局变量。
解释起来有点复杂。如果您需要更多信息,请与我们联系。我使用的PHP版本是5.5
答案 0 :(得分:0)
感谢您的帮助,我通过这个聪明的current()和key()解决方案极大地减少了我的代码行。但我仍然离我想要的一步之遥。
首先是代码:
$Date1 = "";
$Time1 = "";
$Date2 = "";
$Time2 = "";
while (list($var, $val) = each($array1)) {
echo '<br>##### Value of' . $var . 'is' . $val . '<br>';
if($Date2 != $var and $Time2 != $val)
{
$Date1 = $var;
$Time1 = $val;
$Date2 = key($array1);
$Time2 = current($array1);
echo '<br> Value : ' . $Date1;
echo '<br> Value : ' . $Time1;
echo '<br> Value : ' . $Date2;
echo '<br> Value : ' . $Time2;
}
}
正如我前面所述,我的数组是以下形式 $ array1 = [27/03/2016 =&gt; 12:00,28/03/2016 =&gt; 01:00,29 / 03/2016 =&gt; 02:00,30 / 03/2016 =&gt; 03:00,....]
现在,我想比较这个数组中每两个元素的对。 意味着,我想比较(Date1与Date2和Time1与Time2)(Date3与Date4和Time3与Time4)。
所以当我第一次进入数组时,我会捕获Date1,Time1,Date2,Time2,然后我需要跳过其间的指针并跳转到Date3然后捕获(Date3,Date4和Time3以及Time4)。所以在第一次迭代中我想设置
的值$ Date1 = 27/03/2016
$ Time1 = 12:00
$ Date2 = 28/03/2016
$ Time2 = 01:00
然后在第二次迭代中。 我想设置
$ Date1 = 29/03/2016
$ Time1 = 02:00
$ Date2 = 30/03/2016
$ Time2 = 03:00
然后继续..............
所以我在这里使用一个if子句跳过一个循环到一个条件然后跳转到next,但它没有跳过它,因为变量的值在进入下一次迭代的循环时不会持久化。所以目前上面的代码正在取得结果。
第一次迭代:
$ Date1 = 27/03/2016
$ Time1 = 12:00
$ Date2 = 28/03/2016
$ Time2 = 01:00
第二次迭代:
$ Date1 = 28/03/2016
$ Time1 = 01:00
$ Date2 = 29/03/2016
$ Time2 = 02:00
您可以在其中看到第一次运行中的Date2和Time2与第二次中的Date1和Time1相同,这是不需要的。所以当我第一次尝试使用全局变量时,我尝试使用全局变量,但之后它就不起作用了。那么这里有什么建议吗?
我希望这次我能更好地解释它。
答案 1 :(得分:0)
感谢各位提供的提示,我自己得到了答案。 我只是使用next()跳过一个位置并将指针指向下一个位置 下面是代码,它完全符合我的预期。
$Date1 = "";
$Time1 = "";
$Date2 = "";
$Time2 = "";
while (list($var, $val) = each($array1)) {
echo '<br>##### Value of' . $var . 'is' . $val . '<br>';
if($Date2 != $var and $Time2 != $val)
{
$Date1 = $var;
$Time1 = $val;
$Date2 = key($array1);
$Time2 = current($array1);
echo '<br> Value : ' . $Date1;
echo '<br> Value : ' . $Time1;
echo '<br> Value : ' . $Date2;
echo '<br> Value : ' . $Time2;
next($array1); // Here is the line that was required to make it work
}
}
再次感谢您提供的提示。此问题可以标记为已解决。