如何在php中找到数组差异

时间:2014-01-07 11:13:54

标签: php arrays

我有两个数组

$give_ans = Array ( [0] =>0 [1] => 0[2] =>0 [3] =>0 [4] => 0[5] =>0 [6] =>1 [7] =>2 [8] => [9] =>4 [10] => 3[11] =>1 [12] => 0[13] => 2[14] => 1[15] =>2 [16] =>0 [17] =>0 )

$correct_Ans = Array ( [0] => 3 [1] => 1 [2] => 4 [3] => 2 [4] => 3 [5] => 2 [6] => 1 [7] => 2 [8] => 2 [9] => 2 [10] => 2 [11] => 2 [12] => 2 [13] => 2 [14] => 2 [15] => 2 [16] => 2 [17] => 2 )

从这两个数组中,我想检查如果两个数组的相同索引的元素相等,那么它们应该放在一个数组中。

如果give_ans数组中的元素为0,则应将它们放入另一个数组

,其余元素应放入第三个数组。

如何实现这一目标,请帮助我?

7 个答案:

答案 0 :(得分:1)

$length = count($given_ans);
$result = array();

for($i=0; $i < $length; $i++) {
     if ($given_ans[$i] == $correct_Ans[$i]) {
         $result[] = $given_ans[$i];
     }
}

工作演示https://eval.in/86693

答案 1 :(得分:1)

函数array_diff将在这里为您提供帮助:

http://de3.php.net/manual/en/function.array-diff.php

但是你想索引所有重复的内容,所以只需要循环:

$equalResult = array();
for($c = 0; $c < count($give_ans); $c++) {
    if(isset($give_ans[$c]) && isset($correct_Ans[$c])) {
        if($give_ans[$c] == $correct_Ans[$c]) {
            $equalResult[] = array($give_ans[$c] => $correct_Ans[$c]);
        }
    }
}

答案 2 :(得分:1)

  $give_ans = array(0 => 0, 1 => 0,2 =>0 , 3 =>0 ,4 => 0, 5 =>0 , 6 =>1 ,7 =>2 ,8 => 1,9 =>4 , 10 => 3,11 =>1 ,12 => 0,13 => 2,14 => 1,15 =>2 ,16 =>0 ,17 =>0 );
  $correct_Ans = Array (0 => 3 ,1 => 1 ,2 => 4 ,3 => 2 ,4 => 3 ,5 => 2 ,6 => 1 ,7 => 2 ,8 => 2 ,9 => 2 ,10 => 2 ,11 => 2 ,12 => 2 ,13 => 2 ,14 => 2 ,15 => 2 ,16 => 2 ,17 => 2 );

  print_r(array_diff($give_ans, $correct_Ans));

返回与

不匹配的元素数组
Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [12] => 0 [16] => 0 [17] => 0 )

答案 3 :(得分:1)

您可以使用此逻辑

$result = array();

foreach($give_ans as $key => $value){
    if($give_ans[$key] == $correct_Ans[$key]){
        $result[$key] = $value;
    }
}

print_r($result);

答案 4 :(得分:1)

$newArray  = array();
$nullArray = array();
$tempArray = array();
for ($i = 0; $i < count($give_ans) ; $i++){
   if (($give_ans[$i] === $correct_ans[$i]) && $give_ans !== 0){
      array_push($newArray, $give_ans[$i]);
      array_push($tempArray, $i);
   }else if ($give_ans[$i] === 0){
      array_push($nullArray, $i);
      array_push($tempArray, $i);
   }
}

$othersArray = array();
for ($i = 0; $i < count($give_ans); $i++){
   if ($tempArray[$i] !== $give_ans[$i])
      array_push($othersArray, $give_ans[$i];
}

for ($i = 0; $i < count($correct_ans); $i++){
   if ($tempArray[$i] !== $correct_ans[$i])
      array_push($othersArray, $correct_ans[$i];
}

我没时间测试它;)

答案 5 :(得分:0)

您可以使用array_diff()功能。

答案 6 :(得分:0)

$given_ans = array(0 => 0, 1 => 0,2 =>0 , 3 =>0 ,4 => 0, 5 =>0 , 6 =>1 ,7 =>2 ,8 => 1,9 =>4 , 10 => 3,11 =>1 ,12 => 0,13 => 2,14 => 1,15 =>2 ,16 =>0 ,17 =>0 );
$correct_ans = array(0 => 3 ,1 => 1 ,2 => 4 ,3 => 2 ,4 => 3 ,5 => 2 ,6 => 1 ,7 => 2 ,8 => 2 ,9 => 2 ,10 => 2 ,11 => 2 ,12 => 2 ,13 => 2 ,14 => 2 ,15 => 2 ,16 => 2 ,17 => 2 );

$count = count($given_ans);
for ($i = 0; $i < $count; $i++) {
    if ($given_ans[$i] == 0) {
        $zero_ans[$i] = $given_ans[$i];
        unset($given_ans[$i]);
    } else if ($given_ans[$i] == $correct_ans[$i]) {
        $result_ans[$i] = $given_ans[$i];
        unset($given_ans[$i]);
    }
}
echo "Zero value:";
print_r($zero_ans);
echo "Correct:";
print_r($result_ans);
echo "Remaining:";
print_r($given_ans);

此处工作:link

$ result_ans现在将包含匹配索引/值的键和值; $ zero_ans将包含$ given_ans 0值; $ given_ans将包含剩余值。

如果您不想删除$ given_ans,您可以随时复制该数组。