簡體   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