PHP:不区分大小写的“array_diff”

21

我有以下两个数组和用来查找数组差异的代码:

$obs_ws = array("you", "your", "may", "me", "my", "etc");
$all_ws = array("LOVE", "World", "Your", "my", "etc", "CoDe");

$final_ws = array_diff($all_ws, $obs_ws);

以上代码输出的数组为:

$final_ws = array("LOVE", "World", "Your", "CoDe");

但我想要它是这样的:

$final_ws = array("LOVE", "World", "CoDe");

注意,"Your" 没有被删除,可能是因为第二个数组中的 "Y" 是大写字母。我想也排除 "Your" ,所以是否有 PHP 中不区分大小写的 array_diff 版本。

我尝试过 array_udiff,但我不确定如何在我的问题中使用它。

谢谢。

2个回答

69

尝试将strcasecmp作为第三个参数传递给array_udiff函数:

<?php
$obs_ws = array("you", "your", "may", "me", "my", "etc");
$all_ws = array("LOVE", "World", "Your", "my", "etc", "CoDe");

$final_ws = array_udiff($all_ws, $obs_ws, 'strcasecmp');

print_r($final_ws);

输出:

Array
(
    [0] => LOVE
    [1] => World
    [5] => CoDe
)

2
我相信你漏了一个逗号。;) - MitMaro
我尝试使用 array_udiff($all_ws, $obs_ws, 'strcasecmp');,但它不起作用 :( - djmzfKnm
@Prashant:抱歉,变量名有一个小错误。现在重新尝试一下吧,我已经测试过了。 - Ivan Nevostruev
但是它没有起作用,它没有从结果数组中排除“Your”吗? - djmzfKnm
喜欢认为我的问题最多只是棘手,结果发现有一种内置的方法可以处理它,只是我不知道而已。感谢您提供关于array_udiff的提示! - Benjam
显示剩余2条评论

3
你走在了正确的道路上。这是我的建议:
function array_casecmp($arr1,$arr2){
    return array_udiff($arr1,$arr2,'strcasecmp');
}


$obs_ws = array("you", "your", "may", "me", "my", "etc");
$all_ws = array("LOVE", "World", "Your", "my", "etc", "CoDe");
var_dump( array_casecmp($all_ws,$obs_ws) );

2
为什么不直接将函数名“strcasecmp”作为第三个参数传递呢? - Ivan Nevostruev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接