【问题标题】:match two strings and compare each letter in php匹配两个字符串并比较php中的每个字母
【发布时间】:2014-01-04 13:24:59
【问题描述】:

我用谷歌搜索了这个问题,但找不到确切的解决方案...

我有 2 个变量...

$s1 = "ABC"; //or "BC"
$s2 = "BC"; //or "Bangalore"

我必须比较 $s1$s2 并将输出作为 letters which is not present in $s2 eg : "A" // or"C"

这样 我必须比较 $s2$s1 并将输出作为 letters which is not present in $s1 eg : null // or"angalore"

我尝试了什么.. 我将字符串吐到数组中... 使用嵌套 for 循环查找不匹配的字母... 我写了超过 35 行的代码.. 但没有结果:( 请帮帮我......

【问题讨论】:

  • 您真的要比较单个字母吗?在示例中,您给出的结果永远不会是“Angalore”,因为它只会返回单个字母。
  • 假设...“ABC”和“Bangalore”是集合(数学的集合论),那么您需要“ABC”减去“Bangalore”和“Bangalore”减去“ABC”。是你想要的吗?
  • $s1 = "ABC";$s1 = "BC" 只是我给了两个值例如....请取任何一个 $s1 = "ABC"; $s2 = "BC";$s1 = "BC"; $s2 = "Bangalore";
  • @Rotherford 我已经看过那个帖子了.. 不一样

标签: php


【解决方案1】:
echo str_ireplace(str_split($s2), "", $s1); // output: A

【讨论】:

  • 不知道为什么这被否决 - 最简单,最简洁的答案!
  • 哈哈我在评论为什么投反对票 - 是我!我一定是滑倒了——就像我说的最佳答案
【解决方案2】:

你可以在这里使用array_diff()

function str_compare($str1, $str2)
{
    $str1chars = str_split($str1);
    $str2chars = str_split($str2);
    $diff = array_diff($str1chars, $str2chars)
    return implode($diff);
}

通过如下方式调用函数:

$diffchars = str_compare('ABC', 'BC');

您将收到一个字符串,其中包含两个字符串中均未出现的字符。在此示例中,它将是 A,因为该字符出现在 $str1 中,但不在 $str2 中。

【讨论】:

  • 哇,用于创建字符数组的 for 循环很快更改为 str_split() ;)
  • @AmalMurali 确实如此。我完全忘记str_split()的那些时刻之一!
【解决方案3】:

您可以使用str_splitarray_diff 之类的:

<?php
$s1 = 'abcedf';
$s2 = 'xzcedf5460gf';

print_r(array_diff(str_split($s1), str_split($s2)));

【讨论】:

    【解决方案4】:

    使用array_diff():

    function str_diff($str1, $str2) {
        $arr1 = str_split($str1);
        $arr2 = str_split($str2);
        $diff = array_diff($arr1, $arr2);
        return implode($diff);
    }
    

    用法:

    echo str_diff('BC', 'Bangalore'); // => C
    echo str_diff('ABC', 'BC');       // => A
    

    【讨论】:

    • @TunZarniKyaw 他将返回值颠倒了。已更新。
    • 哎呀,我没有投反对票,只是想指出评论中的不正确之处
    【解决方案5】:

    可以这样做

    $str1s = "abc";
    $str2s = "BCd";
    
    
    function findNot($str1, $str2, $asArray = false){
    
        $returnValue = array_diff(array_unique(str_split(strtolower($str1))), array_unique(str_split(strtolower($str2))));
    
        if($asArray == false){
    
            return implode($returnValue);
    
        }else{
    
            return $returnValue;
    
        }
    
    }
    
    echo findNot($str1s, $str2s); //gives a string
    echo findNot($str1s, $str2s, true); //gives array of characters 
    

    这允许您以数组或字符串的形式返回。

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多