Php 如何从数组中检索值并检查它们是否匹配
我正在学习用php编程,我有一个小问题。 我有两个数组:Php 如何从数组中检索值并检查它们是否匹配,php,Php,我正在学习用php编程,我有一个小问题。 我有两个数组: 数组A: 数组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中的第一个元素,如果它确实
数组A: 数组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]:字符串(10)“2012-09-06”
从数组B开始,如果是,则将第四个元素([3]:int 1
)从数组A写入数组C等。因此数组C将仅包含int元素。
如果有人能帮我解决这个问题,我会很高兴的如果你真的需要这样做,你可以做如下事情:
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更多的元素(或相同的数目):
如果数组B总是包含比数组A更多的元素(或相同的数目):
如果有时阵列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不匹配的每个条目的0填充到arrayC中:
foreach($arrayA as $key=>$value)
{
if(in_array($key, $arrayB))
{
$arrayC[] = $value;
}
else
{
$arrayC[] = 0;
}
}
首先,在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
}
$l=count($a);//$a是数组a,$b是数组b
$c=array();//空数组的定义
对于($p=0;$pNested循环将有所帮助。我只是想知道如何使用您建议的多维数组制作它?这是最后一个问题:如果例如arrayC
将给我两个值的结果,例如2,2
,我将如何将这些值与日期匹配“2012-08-07”=>2,2012-08-09"=>2
-将它们显示在arrayA
中匹配日期的位置上,新数组的其余部分填充0
类似arrayC
的内容会给我结果:0,0,2,2,0
如果你知道我的意思,如何实现它?@我刚刚在我的答案中添加了另一个例子,这达到了我想你问的目的因为(虽然我不确定你要去哪里)非常感谢你,我正在尝试使用一些JS库制作非常简单的统计图表:)这就是为什么我需要这样显示数据,让我们看看我是否会这样做,因为我认为我这样做很复杂。您的示例运行良好,但是arrayC
没有“投影”到arrayB
,而是到arrayA
,我希望它能被显示,反之亦然:)比如arrayB
那么如果arrayA
中的元素与arrayB
中的元素匹配,将其写入arrayC
到它在arrayB
中匹配的位置,例如如果arrayA
中的值2012-08-07=>2
匹配日期“2012-08-07”
在arrayB的第4位
我希望它显示在arrayC
的第4位,其他元素将0
,arrayC
的大小将匹配arrayB的大小
$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];
}
}
foreach($arrayA as $key=>$value)
{
if(in_array($key, $arrayB))
{
$arrayC[] = $value;
}
else
{
$arrayC[] = 0;
}
}
$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
}