前导和尾随空格会干扰 array_diff() 比较

问题描述 投票:0回答:4

我有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 )

我试图返回一个新数组,其中包含 $teach_array 中不存在于 $langs_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));

这返回与选项 2 相同的结果。我还尝试仅使用 array_diff 而不是 array_diff_key,它返回与选项 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" }

php arrays filter removing-whitespace array-difference
4个回答
7
投票

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

块引用 我对两个数组都进行了 var_dump,结果如下。 $teach_array : array(5) { [0]=> 字符串(5) " 1 " [1]=> 字符串(5) " 2 " [2]=> 字符串(5) " 3 " [3]=> 字符串(5) " 4 " [4]=> 字符串(5) " 5 " } $lang_array : 数组(2) { [0]=> 字符串(1) "2" [1]=> 字符串(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);

3
投票

PHPTester 刚刚测试了你的,对我来说工作正常..?

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

可以为我工作并打印 1、4、5。

但是...这是您想要获取的解决方案:教师数组中不在语言中的值

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

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

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);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.