Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从数组中检索值并检查它们是否匹配_Php - Fatal编程技术网

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中的第一个元素,如果它确实

我正在学习用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中的第一个元素,如果它确实这样做,则将第二个元素(在本例中为
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
}