我正在学习用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元素。
如果有人可以帮我解决这个问题,那我就很高兴
答案 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
}