【发布时间】:2014-04-19 17:56:33
【问题描述】:
我有一个数字数组,这些数字有时带有连字符,例如软件版本号。我想做的是回显“失踪!”或在缺少数字时运行特定函数。
例如:
$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;
}
?>
【问题讨论】:
-
连字符数字的预期输出是什么?或者您是否真的在尝试改进您现有的代码?
-
如果列表以
1-3-5-7开头然后有1-4.. 会缺少什么吗? -
显然,没有“缺失连字号”的算法。有共同的构建块和策略。您必须考虑它们如何有用并以解决问题的方式组合在一起。
-
杰克:是的。 '1'应该被认为是缺失的,还有'1-1'、'1-2'、'1-3-1'、'1-3-2'、'1-3-3'、'1- 3-4'、'1-3-5-1'、'1-3-5-2'、'1-3-5-3'、'1-3-5-4'、'1-3- 5-5' 和 '1-3-5-6'。
-
Karoly Horvath:当然 :-) 欢迎使用伪代码解释此类构建块和策略。
标签: php arrays algorithm numbers