0

私はPHPでプログラミングすることを学んでいますが、少し問題があります。私は2つの配列を持っています:
配列A:

array(10){
           [0]: string(10) "2012-08-01"
           [1]: int 1
           [2]: string(10) "2012-08-03"
           [3]: int 1
           [4]: string(10) "2012-08-07"
           [5]: int 2
           [6]: string(10) "2012-08-09"
           [7]: int 2
           [8]: string(10) "2012-08-27"
           [9]: int 1
          }

アレイB:

array(4){
          [0]: string(10) "2012-09-04"
          [1]: string(10) "2012-09-06"
          [2]: string(10) "2012-09-08"
          [3]: string(10) "2012-09-10"
        }

配列Aの最初の要素が配列Bの最初の要素と等しいかどうかを確認したい場合は、1配列Aから新しい配列C(1次元)に2番目の要素(この場合)を書き込みます。それ以外の場合は何も書き込みません。配列Cと次に、配列Aのインデックス2の要素[1]: string(10) "2012-09-06"が配列Bの2番目の要素と等しいかどうかを確認します。その場合、配列Aから配列Cなどに4番目の要素()を書き込む[3]: int 1ため、配列Cにはint要素のみが含まれます。誰かがこれを整理する方法を私に手伝ってくれるなら、私はとても幸せです

4

2 に答える 2

1

本当にこの方法で行う必要がある場合は、次のようなことを行うことができます。

foreach($arrayB as $bRow)
{
    if(FALSE !== ($key = array_search($bRow, $arrayA))
    {
        $arrayC[] = $arrayA[$key+1];
    }
}

ただし、配列Aには、文字列インデックス付き配列の方が適している可能性があります。以下の3つの例では、次を使用してください。

$arrayA = array("2012-08-01" => 1, "2012-08-03" => 1, "2012-08-07" => 2, "2012-08-09" => 2, "2012-08-27" => 1);
$arrayB = array("2012-09-04", "2012-09-06", "2012-09-08", "2012-09-10");
$arrayC = array();

配列Aに常に配列B(または同じ数)よりも多くの要素が含まれている場合:

foreach($arrayA as $key=>$value)
{
    if(in_array($key, $arrayB))
    {
        $arrayC[] = $value;
    }
}

配列Bに常に配列A(または同じ数)よりも多くの要素が含まれている場合:

foreach($arrayB as $bRow)
{
    if(isset($arrayA[$bRow]))
    {
        $arrayC[] = $arrayA[$bRow];
    }
}

アレイAが長くなることもあれば、アレイBが長くなることもある可能性がある場合:

$matchedIndexes = array();

foreach($arrayA as $key=>$value)
{
    if(in_array($key, $arrayB))
    {
        $arrayC[] = $value;
        $matchedIndexes[] = $key;
    }
}

foreach($arrayB as $bRow)
{
    // Only add the entries that we did not already add when looping through $arrayA
    if(!in_array($key, $matchedIndexes) && isset($arrayA[$bRow]))
    {
        $arrayC[] = $arrayA[$bRow];
    }
}

arrayBに一致するものがないarrayAの各エントリにゼロをarrayCに入力します。

foreach($arrayA as $key=>$value)
{
    if(in_array($key, $arrayB))
    {
        $arrayC[] = $value;
    }
    else
    {
        $arrayC[] = 0;
    }
}
于 2012-09-10T16:06:07.957 に答える
1

まず、Aには5組の要素があり、Bには4つの要素があります。$ bに要素を追加しないと、私のコードでエラーが発生する可能性があります。ifステートメントが必要な場合は1つありますが、必要に応じて記述します。$ bに5つの要素(0から4)があると仮定すると、これは機能するはずですが、AとBの日付の間に単一の一致がないため、この例では配列Cは空になります。

$l=count($a); //$a is array A, $b is array B
$c=array(); //definition of empty array
for ($p=0;$p<$l;$p++) {
    if ($a[$p*2]==$b[$p]) 
        $c[]=$a[($p*2)+1]; // the way to add new element to C array is to use empty brackets
}
于 2012-09-10T16:07:04.550 に答える