0

我正在学习用 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 的元素是否等于[1]: string(10) "2012-09-06"数组 B 中的第二个元素,如果是,则将[3]: int 1数组 A 中的第四个元素 ( ) 写入数组 C 等,因此数组 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];
    }
}

为 arrayA 中的每个条目在 arrayB 中没有匹配项填充零:

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语句,如果需要我会写。假设 $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
}
于 2012-09-10T16:07:04.550 回答