这是一个奇怪的问题,因为我不知道该怎么称呼它!我有一个包含数字列表的数组。这些数字会被自动检测到,所以我无法设置它们。
数字的范围包括“ 001,002,003,004,005,006 ”或“ 001,003,004 ”。 请注意,在第一个数字列表中,它们都会上升(1,2,3,4,5,6)但在第二个数字中它们的排序较少(1,3,4)。
我的复杂问题是:如何检测第一个可用的数组条目?对于第一个,我想要“ 007 ”,而第二个“ 002 ”。我怎么检测到这个并添加一个数组元素来填充插槽??!
系统支持无限制的插槽,因此没有实际的插槽列表可供比较。
到目前为止,这是我的代码:
$currentunits = array("001", "003", "004", "006");
$currentunits = array_diff($currentunits, range("001", "999"));
echo "<pre>";
print_r($currentunits);
提前致谢,我希望我没有让你感到困惑!
答案 0 :(得分:4)
假设 001 是字符串"001"
而不是数字1
(等):
function findNextSlot($array) {
$counter = +$array[0];
foreach ($array as $current) {
if (sprintf("%03d", $counter) != $current) {
return sprintf("%03d", $counter);
}
$counter++;
}
return sprintf("%03d", $counter);
}
echo findNextSlot(array("001", "002", "003", "004", "005", "006")); // "007"
echo findNextSlot(array("001", "003", "004")); // "002"
答案 1 :(得分:1)
如果数组不是很大,我可能会检测到数组中最小和最大的元素,创建一个包含整个范围的数组,然后将其与原始数据进行比较。
$array = [3,1,4];
sort($array);
$min = $array[0];
$max = end($array);
$comparison = range($min, $max);
$diff = array_diff($comparison, $array);
if ($diff) {
var_dump(current($diff));
}
else {
var_dump(count($array) + 1);
}
结果
int(2)