繁体   English   中英

PHP:解析关联数组以比较数组中的每两个值

[英]PHP: Parsing an Associative array to compare every two values within the array

下面我试图解析一个关联数组。

该数组如下所示:

$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']定义$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 = 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子句跳过一个条件之间的循环,然后跳转到下一个条件,但是由于在进入下一个迭代的循环时变量的值不持久,因此它并未跳过。 所以目前上面的代码正在将我抓到下面的结果。

第一次迭代:

$ 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,这是不希望的。 因此,当我第一次尝试使用全局变量时,我尝试使用它,但是随后它不起作用。 那么这里有什么建议吗?

我希望这次我能更好地解释它。

谢谢你们提供的提示,我自己得到了答案。 我只是使用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
        }
}

再次感谢您提供的提示。 此问题可以标记为已解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM