【问题标题】:PHP: Case-insensitive "array_diff"PHP:不区分大小写的“array_diff”
【发布时间】:2009-12-09 18:31:46
【问题描述】:

我有以下两个数组和查找 array_diff 的代码:

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

注意“你的”没有被删除,这可能是因为“Y”在第二个数组中是大写的。我也想排除“你的”,那么 PHP 中有没有不区分大小写的 array_diff 版本。

我尝试了 array_udiff,但我不知道如何在我的问题中使用它

谢谢

【问题讨论】:

    标签: php arrays array-difference


    【解决方案1】:

    尝试将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
    )
    

    【讨论】:

    • 我相信你少了一个逗号。 ;)
    • 我像array_udiff($all_ws, $obs_ws, 'strcasecmp'); 一样尝试过,但它不起作用:(
    • @Prashant:抱歉,变量名称中有一个小错误。现在就试试。我已经测试过了。
    • 但它不起作用,它没有从结果数组中排除“你的”??
    • 我已经添加了完整的源代码和输出,这是可行的。请按原样进行测试。
    【解决方案2】:

    你走在正确的轨道上。这是我的建议:

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

    【讨论】:

    • 为什么不直接传递函数名'strcasecmp'作为第三个参数?
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 2012-12-01
    • 2013-03-06
    • 2020-02-18
    • 1970-01-01
    • 2012-04-18
    • 2011-04-27
    • 2011-03-31
    相关资源
    最近更新 更多