2016-03-28 10 views
0

以下、私は連想配列を解析しようとしています。PHP:配列内の2つの値を比較するための連想配列の解析

配列は次のようになります。私は、配列のすべての二つの要素に対して操作を実行したい配列を解析する場合、

ここ
$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); 
    } 
} 

Assumption1:私は値1

Assumption2でグローバルカウンタとして$GLOBALS['counter']を定義している:ここでは日付1、時間1、日付2、タイム2は私が世界を考慮PHPページの上部に定義した変数ですスコープは次のとおりです。

以下

が呼び出される関数です:今、解析がコードに初めて行われたときに、ここでの問題は、ですが、私はループが値日付2で解析する際、日付1とタイム1に保存された正しい値を取得しています

//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;  
} 

Time2の場合、Date1とTime1の値はnullに設定されます。

私はAssoc配列の最初の要素を2番目に、3番目を4番目に、などと比較したいと思います。

将来、比較のために、変数に格納されているDate1とTime1、Date2とTime2の値が必要です。しかし、それぞれの解析のために、私はそのペアのいずれかが得られるようにしています。

ここでは、グローバル変数を間違って割り当てていると思われます。

説明するのが少し複雑です。より多くの情報が必要な場合はお知らせください。私が使用しているPHPのバージョンは5.5

+0

[次へ](http://php.net/manual/de/function.next.php)や[prev](http://php.net/manual/)のようなphpの組み込み関数を使うことができます。 de/function.prev.php)を呼び出し、foreachでこれらを繰り返します。だから、あなたはグローバルにカウンターが必要ないでしょう。 – Alex2php

+0

何をしているのか、これは間違っています。問題をスケールダウンして、この混乱のすべてではなく必要な最終結果を表示します。 – AbraCadaver

+0

これらの機能を提案してくれてありがとうAlex2php、phpの新機能として、これを知らなかった。もう1つ質問がありますが、これらの関数はAssoc配列の要素の「値」を返します。 Assoc配列のkey => value形式でこの関数を使って "key"を取り出す方法はありますか? –

答えて

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; 

     } 
} 

、私の配列は、フォームの下にある $配列1 = [27/03/2016 => 12時、28/03/2016 => 01:00、29/03/2016 => 02:00、30/03/2016 => 03:00、....]

ここでは、この2つの要素のペアを比較したいと思いますアレイ。 は、(Date1とDate2とTime1をTime2と比較して)同様に(Date4とDate4とTime3をTime4で)比較したいと考えています。

最初に配列に入ると、Date1、Time1、Date2、Time2をキャプチャしてから、ポインタをスキップしてDate3にジャンプし、(Date3、Date4、Time3、Time4)をキャプチャする必要があります。だから、最初の反復では、私は

$日付1 = 27/03/2016

$時間1 =午前12時00

$日付2 = 28/03/2016

$の値を設定したいですTime2 = 01:00

次に、2番目の反復で。 私は

$日付1 = 29/03/2016

$時間1 =二時

$日付2 = 30/03/2016

$タイム2 = 3:00

を設定したいです

、その後、だから私は一つの条件のための間でループをスキップし、次にジャンプするには、ここif節を使用しています..............

を上に行くが、それ私はスキップしていません変数の値としてのtは、次の反復のためにループに入るときに持続しない。だから、上記のコードは私の結果を下に取り込んでいます。

最初の反復:

$日付1 = 27/03/2016

$時間1 = 12時〇〇

$日付2 = 28/03/2016

$タイム2 = 01:00

第2反復:

$日付1 = 28/03/2016

$時間1 = 1:00

$日付2 = 29/03/2016

$タイム2 = 2時00分

ここでは、最初の実行でDate2とTime2が同じDate1とTime1秒であることがわかりますが、これは望ましくありません。だから私は最初に試したときにグローバル変数を使用しようとしましたが、その後は動作しませんでした。だからここに何か提案はありますか?

私は今度はそれをより良く説明してくれることを願っています。

0

ヒントを教えていただきありがとうございます。私は自分で答えを得ました。 私はちょうど1つの位置をスキップして次の位置にポインタを移動するために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 
     } 
} 

提供されているヒントをもう一度おねがいします。この問題は解決済みとマークすることができます。

関連する問題