简单的array_diff无法正常工作

时间:2017-05-19 15:41:40

标签: php arrays

我有2个数组。
第一个是$ teach_array,第二个是$ langs_array。
它们各自的价值是:
$ teach_array:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
$ langs_array:Array ( [0] => 2 [1] => 3 )

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

我尝试过使用几种方法,包括:

选项1

$result = array_diff($teachArray, $language_1d_array);

这仍然会返回$ teach_array的所有值。

选项2

 $result = array_diff_key($teachArray, $language_1d_array);

但是,这只会返回不正确的Array ( [2] => 3 [3] => 4 [4] => 5 )

选项3

$result = array_values(array_diff_key($teachArray, $language_1d_array));

返回与Option 2相同的结果。我也尝试仅使用array_diff而不是array_diff_key,它返回与Option 1相同的结果。


我在两个数组上都做了一个var_dump,这是结果。
$ teach_array: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" }

4 个答案:

答案 0 :(得分:4)

希望您已经找到了解决方案,但以防万一我想指出您的注意事项。

  

块引用   我在两个数组上都做了一个var_dump,这是结果。   $ teach_array: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”}

$ teach_array中没有任何值匹配$ lang_array的任何值。 由于格式值不同,因此一个数组在要匹配的值" 2 "之前和之后包含空格。

var_dump($teach_array) => array(5) { [0]=> string(5) " 4 " ... } var_dump($lang_array) => array(5) { [0]=> string(1) "2" ... }

我猜你有一些空格。请再试一次:

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

答案 1 :(得分:2)

PHPTester刚刚测试过你的,对我来说效果很好..?

Db

为我工作和打印1,4,5。

但是......这是您尝试获取的内容的解决方案:教师数组中不在langs中的值

$teachArray =[1,2,3,4,5];
$langsarray =[2,3];
$result = array_diff($teachArray,$langsarray);
print_r($result);

答案 2 :(得分:2)

我确信这是一种更优雅的方式,但这有效:

$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);

答案 3 :(得分:1)

这是(基本上)你所说的。它对我有用:

<?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);