【问题标题】:Find missing values in array - PHP [closed]在数组中查找缺失值 - PHP [关闭]
【发布时间】:2019-03-11 09:56:27
【问题描述】:

我有一个数组计算多个值,例如 D0001、D0002、D0003、... 但有时缺少一个值,在这种情况下,这些值应该是新的 ID。如果没有缺失值,则取下一个值。 这是我用来检索数组的代码。

example => array = array("D0001","D0002","D0003","DOOO5");

# function finding missing values?
function missing_values($list)
$range = 0;
foreach ($list as $l){
    $nr = $range+1
    if ($l != $nr){
       $id = $nr;
    }
}


$numbers = array();
while($row = $result->fetch_array()){
    $id = $row['id'];
    echo "--------------------------------" . "<br/>"; 
    echo "ID " . " --> " . $id ."<br/>"; 
    $id = substr($id,1);
    echo "ID " . " --> " . $id ."<br/>"; 
    $id = ltrim($id, '0');
    echo "ID " . " --> " . $id ."<br/>"; 
    $list[] = $id; 
}
print_r($list);

# Find missing values 
 $array = missing_values($list);

if(empty($array)){
  $max = max($list);
  $id = $max+1;  
}else{
      $keys = array_keys($array);
      $id = $array[$keys[0]];
}

有人能告诉我如何在数组中找不到缺失值吗?还是有更简单的方法来做到这一点?

【问题讨论】:

  • 请添加您的演示数组和预期输出
  • 专业提示:欢迎初学者,但我们希望在发布问题之前在问题上花费一定的精力。尽管我们非常愿意帮助您解决您编写的代码的问题,但我们不会为您编写代码。
  • 我建议检查 $list 中的最大 val 并将其与 count(list) 进行比较

标签: php arrays function


【解决方案1】:
# Determine the first free id
function get_first_free_id($id_list){
    // construct a new array
    $new_array = range($id_list[0],max($id_list));                                                    
    // use array_diff to find the missing elements 
    $mis_array = array_diff($new_array, $id_list);
    $keys = array_keys($mis_array);
    if(empty($keys)){
        $highest = max($id_array);
        $id = $highest+1;
    }else{
        $id = $mis_array[$keys[0]];
    }
    return $id;

}

【讨论】:

  • 不错的答案! (+1) - 我会将返回所有缺失值的数组的代码函数和找到第一个键的外部代码分开。另请注意,您假设列表已排序(因为您采用第一个元素而不是最小值 - 或采用 min 而不是 [0]
【解决方案2】:

你可以使用下面的逻辑来做到这一点

$myArray = array("D0001","D0002","D0003","D0005", "D0009", "D0019", "D0020", "D0030");

$first = reset($myArray);
$last = end($myArray);

for ($i=$first;  $i<=$last; $i++) {
 $index = array_search($i, $myArray);
  if(!is_numeric($index)) {
      echo "missing " .$i;
      echo "<br>";
  }
 }

http://sandbox.onlinephpfunctions.com/code/25daa236e6f02a0566dfe0ea06124776dbf20da0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2014-11-03
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多