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