PHP 在连字符数组中查找缺失的数字

标签 php arrays algorithm numbers

我有一组数字,这些数字有时用连字符连接,就像软件版本号一样。我想做的是回应“失踪!”或在缺少数字时运行特定功能。

例如:

$numbers = array('1', '2', '3', '5', '6', '8');

打印:

1
2
3
Missing!
5
6
Missing!
8

我遇到了连字符的问题。

例如:

$numbers = array('1', '1-1', '1-3', '3-1-1', '3-1-3');

打印:

1
1-1
Missing!
1-3
Missing!
3-1-1
Missing!
3-1-3

另外,我的代码看起来非常长/做了太多事情——在我看来——应该是一项简单的任务。有没有针对这种事情的方法或算法?

这是我的代码:

<?php

    $numbers = array(
        '1',
        '1-1',
        '1-3',
        '3-1-1',
        '3-1-3'
    );

    foreach ($numbers as $number) {
        if (isset($prev_number)) {
            $curr_number = explode('-', $number);
            $prev_levels = explode('-', $prev_number);

            if (preg_match('/-/', $number) and !preg_match('/-/', $prev_number)) {
                if (current() - $prev_levels[0] >= 1) {
                    echo 'Missing!<br>' . PHP_EOL;
                }
            }

            for ($missing = 1; ((count($curr_number) - count($prev_levels)) - $missing) >= 1; $missing++) {
                echo 'Missing!<br>' . PHP_EOL;
            }

            foreach ($curr_number as $hyphen => $part) {
                for ($missing = 1; ($part - $missing) - $prev_levels[$hyphen] >= 1; $missing++) {
                    echo 'Missing!<br>' . PHP_EOL;
                }
            }
        } else {
            if ($number != '1') {
                echo 'Missing!<br>' . PHP_EOL;

                foreach ($curr_number as $part) {
                    for ($missing = 1; $part > $missing; $missing++) {
                        echo 'Missing!<br>' . PHP_EOL;
                    }
                }
            }
        }

        echo $number . '<br>' . PHP_EOL;

        $prev_number = $number;
    }

?>

最佳答案

只回答了一部分。

Plus my code seems awfully long/doing too many things for what -- seems to me -- should be a simple task.

正确的观察。如果它做的事情太多,请尝试将任务分成几部分。模块化。

例如:我在您的代码中看到 6 个 explode 调用。您一直在努力将输入转换为可用的数据格式。进行预处理阶段,使用一次explode 将字符串转换为数组,然后处理该数据格式。

关于PHP 在连字符数组中查找缺失的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22405056/

相关文章:

php - 通过循环遍历 mySQL 数据库创建数组,在 PHP 中仅捕获一次条目

php - Office365 API - 访问其他用户/房间的日历

algorithm - 查找重叠时间的线程

algorithm - 最小生成树与另一个不同

php - 将预构建的 Laravel 站点安装到本地 MAMP 服务器上

php - 为什么在 CodeIgniter 中调用 sess_update?

java - Java中的两个数组声明有什么区别?

c# - 在 C# 中将字符串值格式化为 $xx.xx 格式

java - int 数据类型初始化 : Array vs Regular

algorithm - 如何创建一个唯一的散列来匹配任何字符串排列