【问题标题】:Compare two integer and count matching numbers比较两个整数并计算匹配的数字
【发布时间】:2018-04-09 18:04:06
【问题描述】:

我有两个整数,例如“12345”和“98754”,它们有两个匹配的数字 即4和5,顺序无关紧要。

现在:如何在 PHP 中检查类似的内容?

【问题讨论】:

  • 检查什么? 他们有 2 个匹配的数字是什么意思
  • 他们都有一个 4 和一个 5 - 总共有 2 个匹配的数字
  • 不确定是否有字符串方式,但您可以将所有数字放入数组中并以这种方式检查每个值
  • 顺便说一句,如果这是为了课程作业(如果不是,请道歉)那么您真的应该先尝试解决问题,然后询问何时卡住。否则你就学不会写代码,只是问怎么写代码;)

标签: php


【解决方案1】:

您可以将输入拆分为数组并使用 array_intersect 查找匹配的数字。

$a = 12345;
$b = 98754;

//Create arrays of the numbers
$a = str_split($a);
$b = str_split($b);

// Find matching numbers
$matching = array_intersect($a, $b);
Var_dump($matching);
// Output: 4,5
Echo count($matching);
// Output: 2

https://3v4l.org/8tS3q

【讨论】:

  • "并计算匹配的数字"
  • @James 没有看到。问题中没有提到它,这就是为什么我没有看到它。谢谢。
  • "他们有 count 2 个匹配的数字,即 4 和 5" :P
  • 是的,他们的计数是 2,但这并不意味着它被要求。只有在标题中才实际请求。
【解决方案2】:
  1. 将数字转换为字符串
  2. 创建一个从 0 到 9 的循环,以使用 strstr() 或类似方法检查两个字符串中是否出现数字
  3. 如果数字同时出现在数组中,则将其存储在数组中

编辑: 以代码为中心的解决方案:

$a = 1231534;
$b = 89058430;


    $matches = compare( $a, $b );   
    print count($matches);


    function compare ( $a, $b ) {
        $str_a = (string) $a;
        $str_b = (string) $b;
        $matches = [];
        for($i=0;$i<=9;$i++) {
            if (strstr($str_a, (string)$i) && strstr($str_b,(string)$i)) $matches[] = $i;
        }

        return $matches;
    }

【讨论】:

  • 您确实需要为此提供更多 codey 答案。 Stack Overflow 上的概念性答案对任何人都没有多大用处。另外,请回复您的2,如果号码超过 9 个怎么办?他们检查的外观是多少?
  • 对不起,我试图帮助原始发布者找出解决方案,而不是提供代码。回覆。 #2,只有0-9个数字,所以它只需要检查两个字符串中的那些字符。
  • @BurningSimon 请记住,此解决方案是此处唯一不显示一个数字是否重复两次的解决方案(查看 Progrocks 示例数字)。如果你有 4,4,5,你可以用 array_unique() 删除重复的,但如果你没有重复,你也不能得到它们。
【解决方案3】:

在此处添加了一个示例,该示例计算两个数字中出现的数字。 如果两者都出现多个数字,则包括:

<?php
function digits_in_both($x, $y)
{
    $in_both = [];
    $split_y = str_split($y);
    foreach(str_split($x) as $n) {
        $key = array_search($n, $split_y);
        if($key !== false) {
            $in_both[] = $n;
            unset($split_y[$key]);
        }
    }

    return $in_both;
}

$in_both = digits_in_both(123445, 4456);
var_export($in_both);
var_dump(count($in_both));

输出:

array (
  0 => '4',
  1 => '4',
  2 => '5',
)int(3)

与您对 array_intersect 的期望相反,顺序很重要,如下所示:

var_export(array_intersect(str_split('024688'), str_split('248')));
var_export(array_intersect(str_split('248'), str_split('024688')));

输出:

array (
    1 => '2',
    2 => '4',
    4 => '8',
    5 => '8',
  )array (
  0 => '2',
  1 => '4',
  2 => '8',
)

【讨论】:

  • 非常感谢,包含重复数字非常重要:)
猜你喜欢
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2017-06-21
相关资源
最近更新 更多