下面我正在尝试解析一个关联数组。
阵列看起来像:
$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 的全局计数器
假设2:这里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的值被设置为null。
因为我想比较Assoc数组的第一个元素和第二个,第三个和第四个,依此类推
我希望将Date1和Time1以及Date2和Time2值存储在变量中,以便将来进行比较。但对于每一个解析,我都会得到这两个解析中的任意一个。
在这里,我怀疑我没有正确地分配全局变量。
解释起来有点复杂。如果你需要更多信息,请告诉我。我使用的PHP版本是5.5
感谢您的帮助,通过这个聪明的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=>12:00,28/03/2016=>01:00,29/03/2016>>02:00,30/03/2016=>03:00,….]
现在,我想比较这个数组中每两个元素中的一对。意思是,我想类似地比较(Date1与Date2和Time1与Time2)(Date3与Date4和Time3与Time4)。
因此,当我第一次输入数组时,我会捕获Date1、Time1、Date2、Time2,然后我需要跳过中间的指针,跳到Date3,然后捕获(Date3、Date4、Time3和Time4)。所以在第一次迭代中,我想设置的值
$Date1=2016年3月27日
$Time1=12:00
$Date2=2016年3月28日
$Time2=01:00
然后在第二次迭代中。我想设置
$Date1=2016年3月29日
$Time1=02:00
$Date2=2016年3月30日
$Time2=03:00
然后继续…………..
所以我在这里使用if子句来跳过一个条件之间的循环,然后跳到下一个条件,但它并没有跳过它,因为在进入下一次迭代的循环时,变量的值不会持久化。所以目前上面的代码正在获取下面的结果。
第一次迭代:
$Date1=2016年3月27日
$Time1=12:00
$Date2=2016年3月28日
$Time2=01:00
第二次迭代:
$Date1=2016年3月28日
$Time1=01:00
$Date2=2016年3月29日
$Time2=02:00
您可以看到第一次运行中的Date2和Time2是第二次运行中相同的Date1和Time1,这是不希望的。所以当我第一次尝试全局变量时,我尝试使用它,但后来它不起作用。这里有什么建议吗?
我希望这次我解释得更好。
感谢各位提供的提示,我自己得到了答案。我只是用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
}
}
再次感谢您提供的提示。此问题可以标记为已解决。