首页 文章

如何使用输出true或false创建php函数给定数组所有序列号1到n

提问于
浏览
-4

请帮助制作php函数,检查给定的整数数组是否包含从1到N的所有序列号 . 每个数字只能在数组中出现一次 . 输出true / false .

3 回答

  • 1
    • 每个数字必须是整数

    • 每个号码必须大于前一个号码

    • 允许使用负数 .

    function testInt($ my_array)
    {
    $ prevval = null;
    foreach($ my_array as $ val){
    if((filter_var($ val,FILTER_VALIDATE_INT))=== false){
    返回虚假;
    }
    if($ prevval!== null){
    if($ val <= $ prevval){
    返回虚假;
    }
    }
    $ prevval = $ val;
    }
    返回true;
    }

    $test1 = [-1, "4", 5, 7];
    $test2 = [0, 1, 2, 100];
    $test3 = [1, 4, 4, 100];
    $test4 = [1, 5, 4, 1000];
    $test5 = [5, 6, 7, "50"];
    
    var_dump(testInt($test1));
    bool(true)
    var_dump(testInt($test2));
    bool(true)
    var_dump(testInt($test3));
    bool(false)
    var_dump(testInt($test4));
    bool(false)
    var_dump(testInt($test5));
    bool(true)
    
  • 0

    因为你说整数包含从1到N的所有序列号 . 每个数字只能在数组中出现一次
    这意味着如果我们将数组与range()进行比较,那么输出为true / false .
    如果数组未排序,您还可以包括排序 .

    $arr1 = [2,1,3,4,5,6,6,7];
    $arr2 = [1,2,3,4,5,6,7];
    $arr3 = [1,3,4,5,6,7];
    $arr4 = [1,5,6,7,4,3,2];
    
    // sort arrays
    sort($arr1);
    sort($arr2);
    sort($arr3);
    sort($arr4);
    
    $n = 7;
    $range = range(1,$n);
    // or $range(min($array),$n); or $range(min($array),max($array)); depedning on how you want it set up
    
    
    var_dump($arr1 == $range); //false
    var_dump($arr2 == $range); //true
    var_dump($arr3 == $range); //false
    var_dump($arr4 == $range); //true
    

    https://3v4l.org/DMe46


    通过添加信息,我们可以使用array_intersect和count .
    Array intersect返回数组中的匹配项 .
    如果我们计算它们,我们会看它们是否匹配 .

    $arr1 = array(2,3,1,4);
    $arr2 = array(2,5,3,4);
    $arr3 = array(1,3,4,2,5,6,3);
    
    
    $range1 = range(1,max($arr1));
    $range2 = range(1,max($arr2));
    $range3 = range(1,max($arr3));
    
    
    var_dump(count($range1) == count(array_intersect($arr1, $range1)));
    // true
    
    var_dump(count($range2) == count(array_intersect($arr2, $range2)));
    // false
    
    var_dump(count($range3) == count(array_intersect($arr3, $range3)));
    // false
    

    https://3v4l.org/7Hdll

  • 0

    有更好的方法,但我会尽量保持简单 .

    如果将所有元素作为键插入新数组,则可以检查它们是否已存在于数组中 . 第二步是检查是否所有都在那里 - 你可以通过检查数组中元素的数量是否与max元素相同来做到这一点:

    function checkFullArray($array) {
            $dic = array();
            foreach($array as $elem) {
                    if (array_key_exists($elem, $dic))
                            return false;
                    $dic[$elem] = true;
            }
            return count($dic) == max($array);
    }
    

    使用示例:

    echo checkFullArray([1,2,3,4]). PHP_EOL; //true
    echo checkFullArray([3,2,1,4]). PHP_EOL; //ture
    echo checkFullArray([1,2,2,4]). PHP_EOL; //false
    echo checkFullArray([1,2,4]). PHP_EOL; //false
    

    如果你的数组也可以包含字符串和更多没有int的人员添加check作为 foreach 循环的第一行

相关问题