如何从数组中检索值并检查它们是否匹配

时间:2012-09-10 15:51:12

标签: php

我正在学习用PHP编程,我有一点问题。 我有两个阵列:
数组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(一维) )否则不在数组C中写入任何内容,然后检查数组A中索引为2的元素是否等于数组B中的第二个元素[1]: string(10) "2012-09-06",如果是,则写入第四个元素([3]: int 1)数组A到数组C等,所以数组C只有int元素。 如果有人可以帮我解决这个问题,那我就很高兴

2 个答案:

答案 0 :(得分: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中的zeros foreach条目填充arrayC:

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

答案 1 :(得分:1)

首先,在A中你有5对元素而在B中你有4个元素。如果你不将元素添加到$ b,我的代码可能会产生错误。将需要一个if语句,如有必要,我会写。假设$ b有5个元素(从0到4),这应该可行,但在你的例子中,数组C将为空,因为A和B中的日期之间没有单一的匹配:

$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
}