猿问

php - 如何在不使用内置函数的情况下在php中找到一个数组到另一个数组的缺失元素?

正如我在下面提到的,我有两个数组:


$arr1 = array("1","3","4","6");

$arr2 = array("2","3","4","5","7");

我想在$arr2不使用内置函数的情况下获取那些不在的元素。那么,我该怎么做呢?


墨色风雨
浏览 185回答 2
2回答

明月笑刀无情

您可以循环两次并在匹配时取消设置并中断内部循环$arr1 = array("1","3","4","6");$arr2 = array("2","3","4","5","7");foreach($arr1 as $k => $v){    foreach($arr2 as $k1 => $v1){        if($v == $v1){            unset($arr1[$k]);break;        }    }}print_r($arr1);输出:Array(    [0] => 1    [3] => 6)

www说

我对在 PHP 中不使用任何数组函数或特殊函数的问题很感兴趣,所以这里是我想出的比较两个数组的方法(正如它们所写的那样,没有执行进一步的测试,它可能会中断) 而不使用这些函数。它需要一些杂耍:$arr1 = array("1","3","4","6");$arr2 = array("2","3","4","5","7");$inTwo = array();$notInTwo = array();// get the matching elements from the two arrays to create a new arrayforeach($arr1 AS $key => $val) {    foreach($arr2 AS $key2 => $val2) {        if($val == $val2) {            $inTwo[] = $val2;        }    }}print_r($inTwo);$match = NULL; // variable used to hold match values, so they can be skippedforeach($arr1 AS $key3 => $val3) {    foreach($inTwo AS $key4 => $val4) {        echo $val3 . ' ' . $val4 . "\n";        if(($val3 == $val4) || ($match == $val4)) { // test            echo "match\n";            $match = $val3; // set the new variable, to be checked on the next iteration            echo $match ."\n";            break;        } else {            $notInTwo[] = $val3;            break;        }    }}print_r($notInTwo);这是输出(所有测试输出留作参考):Array //print_r($inTwo);(    [0] => 3    [1] => 4)1 33 3match // set the match variable34 3 // skip this due to the matchmatch // set the match variable46 3Array print_r($notInTwo);(    [0] => 1    [1] => 6)区分两个数组需要一些递归。如果您想知道这是如何工作的,您可以查看 PHP(以及其他提供差异算法的语言)的源代码,以了解如何执行此操作。我在这里写的东西很粗糙,是一种针对这个问题的牛在中国商店的方法。
随时随地看视频慕课网APP
我要回答