Php 简单数组_diff不工作

Php 简单数组_diff不工作,php,arrays,Php,Arrays,我有两个数组 第一个是$teach_数组,第二个是$langs_数组。 它们各自的值为: $teach_数组:数组([0]=>1[1]=>2[2]=>3[3]=>4[4]=>5) $langs_数组:数组([0]=>2[1]=>3) 我试图返回一个新数组,其中包含$teach_数组中不在$langs_数组中的所有条目 因此最终结果应该是:数组([0]=>1[3]=>4[4]=>5) 我尝试了几种方法,包括: 选择1 这仍然返回$teach_数组的所有值 选择2 但是,这只返回数组([2]=>

我有两个数组
第一个是$teach_数组,第二个是$langs_数组。
它们各自的值为:
$teach_数组:
数组([0]=>1[1]=>2[2]=>3[3]=>4[4]=>5)

$langs_数组:
数组([0]=>2[1]=>3)

我试图返回一个新数组,其中包含$teach_数组中不在$langs_数组中的所有条目
因此最终结果应该是:
数组([0]=>1[3]=>4[4]=>5)

我尝试了几种方法,包括:

选择1 这仍然返回$teach_数组的所有值

选择2 但是,这只返回数组([2]=>3[3]=>4[4]=>5),这是不正确的

选择3 这将返回与选项2相同的结果。我还尝试只使用array_diff而不是array_diff_键,它返回的结果与选项1相同


我在两个数组上都进行了var_转储,结果如下。
$teach_数组:
array(5){[0]=>string(5)“1”[1]=>string(5)“2”[2]=>string(5)“3”[3]=>string(5)“4”[4]=>string(5)“5”}


$lang_array:
array(2){[0]=>string(1)“2”[1]=>string(1)“3”}

PHPTester刚刚测试了你的,对我来说可以吗

$teachArray =[1,2,3,4,5];
$langsarray =[2,3];
$result = array_diff($teachArray,$langsarray);
print_r($result);
为我工作和打印1,4,5

但是…这里有一个解决方案可以解决您试图获取的问题:教师数组中不在langs中的值

$new_array = array();

foreach($teach_array as $item){    // Loop the teacher_array
  if(!in_array($item,$langs_array)){   // If the teach_array value doesn't exist in the lang_array, add the value
    $new_array[] = $item;
  }
}

我相信还有一种更优雅的方式,但这是可行的:

$teach = [1, 2, 3,4, 5];
$langs = [2, 3];

$result = [];

foreach ($teach as $key => $t) {
    if (!in_array($t, $langs)) {
        $result[$key] = $t;
    }
}
var_dump($result);
这(基本上)就是你所说的你拥有的。这对我很有用:

<?php
  $fred = array(0=>1, 1=>2, 2=>3, 3=>4, 4=>5);
  $bert = array(0=>2, 1=>3);
  $res = array_diff($fred, $bert);
  print_r($res);

希望您已经找到了解决方案,但以防万一,我想告诉您以下内容

大宗报价 我在两个数组上都进行了var_转储,结果如下。 $teach_数组:数组(5){[0]=>string(5)“1”[1]=>string(5)“2”[2]=>string(5)“3”[3]=>string(5)“4”[4]=>string(5)“5”} $lang_数组:数组(2){[0]=>string(1)“2”[1]=>string(1)“3”}

$teach_数组中没有一个值与$lang_数组的任何值匹配。 由于存在不同格式的值,因此一个数组在要匹配的值
“2”
之前和之后都包含空格

var\u dump($teach\u array)=>array(5){[0]=>string(5)“4”…}
var\u dump($lang\u数组)=>array(5){[0]=>string(1)“2”…}

我想你有一些空白。请使用以下命令重试:

$diff = array_diff(array_map('trim', $teach_array), $lang_array);

嗯,这些功能按预期工作。让我们看看是否可以找到一个满足您需要的函数。
array\u diff
可以很好地实现这一点。它应该会产生您想要的输出。请仔细查看您的数组名称。您使用了不同的名称和1d,可能需要id。因此,可能存在错误。我尝试了它,它返回了未分页的$teach\u数组。这真是weird@Viteazulvar_在执行数组diff之前转储您的语言数组,并确保它是您认为的。@Viteazul确保您的数组具有正确的打印数据,可能正在进行一些奇怪的类型转换?@Don'tPanic我进行了var_转储,我的每个元素的结果中都有一些空白。我不知道这是否是问题所在是的,这会阻止值匹配。您可以在比较之前对该数组进行数组映射修剪,以删除多余的空格。
$teach = [1, 2, 3,4, 5];
$langs = [2, 3];

$result = [];

foreach ($teach as $key => $t) {
    if (!in_array($t, $langs)) {
        $result[$key] = $t;
    }
}
var_dump($result);
<?php
  $fred = array(0=>1, 1=>2, 2=>3, 3=>4, 4=>5);
  $bert = array(0=>2, 1=>3);
  $res = array_diff($fred, $bert);
  print_r($res);
$diff = array_diff(array_map('trim', $teach_array), $lang_array);