Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";rtrim“;PHP数组(仅在数组末尾删除空元素),并尽可能避免for或类似循环_Php_Arrays - Fatal编程技术网

如何";rtrim“;PHP数组(仅在数组末尾删除空元素),并尽可能避免for或类似循环

如何";rtrim“;PHP数组(仅在数组末尾删除空元素),并尽可能避免for或类似循环,php,arrays,Php,Arrays,与字符串的rtrim()非常相似,如何仅在数组末尾的最后一个非空元素之后删除数组的空元素,同时避免for或类似循环,并可能使用PHP的数组函数 实际上,我正在寻找最快/最高效/优雅的方法,但是如果没有for或类似的循环,或者我对“快速/高效/优雅”的理解有误,特别是对于PHP的数组函数,那么我将非常乐意学习/知道什么是最好的。谢谢 其他假设: 在数组中最后一个非空元素之前,可以有一系列单个或连续的空元素 无需担心空数组,但如果涵盖了此情况,则完全可以 例如: Array ( [0] =&

与字符串的
rtrim()
非常相似,如何仅在数组末尾的最后一个非空元素之后删除数组的空元素,同时避免
for
或类似循环,并可能使用PHP的数组函数

实际上,我正在寻找最快/最高效/优雅的方法,但是如果没有
for
或类似的循环,或者我对“快速/高效/优雅”的理解有误,特别是对于PHP的数组函数,那么我将非常乐意学习/知道什么是最好的。谢谢

其他假设:

  • 在数组中最后一个非空元素之前,可以有一系列单个或连续的空元素
  • 无需担心空数组,但如果涵盖了此情况,则完全可以
  • 例如:

    Array
    (
        [0] => ""
        [1] => "text"
        [2] => "text"
        [3] => ""
        [4] => "text"
        [5] => ""
        [6] => ""
        [7] => "text"
        [8] => ""
        [9] => ""
    )
    
    最终将是:

    Array
    (
        [0] => ""
        [1] => "text"
        [2] => "text"
        [3] => ""
        [4] => "text"
        [5] => ""
        [6] => ""
        [7] => "text"
    )
    
    Array
    (
        [0] => "text"
        [1] => "text"
        [2] => "text"
        [3] => "text"
        [4] => "text"
        [5] => "text"
        [6] => "text"
    )
    

    最终将是:

    Array
    (
        [0] => ""
        [1] => "text"
        [2] => "text"
        [3] => ""
        [4] => "text"
        [5] => ""
        [6] => ""
        [7] => "text"
    )
    
    Array
    (
        [0] => "text"
        [1] => "text"
        [2] => "text"
        [3] => "text"
        [4] => "text"
        [5] => "text"
        [6] => "text"
    )
    

    就像你在问题中写的:只要最后一个值是空字符串,就从数组中删除它:

    while ("" === end($array))
    {
        array_pop($array);
    }
    
    编辑:我不知道这有多严重,不过为了好玩,我想出了一个在用户代码中不使用任何循环的方法,但是,循环确实涉及到PHP C函数中。也许这会带来不同,不知道,负责任地享受:

    $array = array_slice($array, 0, key(array_reverse(array_diff($array, array("")), 1))+1);
    
    工作原理:

    • 获取一个包含所有不在
      数组(“”)中的值的数组。密钥将被保留(这是重要的部分,数组中的密钥为0-n)
    • 获取最后一个元素的键
    • 从开始到该位置切片阵列

    根据需要使用
    trim()
    rtrim()

    explode( '·', trim( implode( '·', $test ), '·') );
    
    它改变了

    Array
    (
        [0] => 
        [1] => text
        [2] => text
        [3] => 
        [4] => text
        [5] => 
        [6] => 
        [7] => text
        [8] => 
    )
    
    …到

    Array
    (
        [0] => text
        [1] => text
        [2] => 
        [3] => text
        [4] => 
        [5] => 
        [6] => text
    )
    

    重建数组后,使用
    array\u值
    重建索引

    array_walk_recursive('unset_any_null_values_function', $array);
    
    print_r(array_values($array));
    

    除了为
    执行
    ,我尝试了array_filter(),但我意识到这也会在数组结束之前删除其他空元素。哦,对不起@webarto,无论如何谢谢。只要成员不是
    '0'
    如果(!empty($value))中断;未设置($array[$key])为mesweet果冻豆工作是的!我怎么会错过呢?哈克雷·耶拉传说。谢谢(很抱歉,需要再等4分钟才能接受答案。)和@webarto,至少它不必在整个数组中循环。@AnaBan,在任何情况下它都不会:)+1@webarto我懂了。。如果整个数组都被空值填充了呢?其计数仍将大于0。。陛下还是我又错了?谢谢,我学到了很多。@AnaBan:“只有”三个内置数组函数,我就能做到。请参阅更新后的答案。@mplungjan:您很可能是指
    而(!end($array))
    但是,如果您想更详细地了解该错误,请参阅;如果您想了解为什么使用
    empty
    错误,请查看在“内爆”中设置的分隔符会发生什么情况在原始数组中的一个值内使用?则它将中断。如果你不能控制内容,你需要@hakre的解决方案。对-我刚刚指出,当你需要像这样从数组来回移动时,你真的不能使用数组到字符串的操作。
    Array
    (
        [0] => text
        [1] => text
        [2] => 
        [3] => text
        [4] => 
        [5] => 
        [6] => text
    )
    
    array_walk_recursive('unset_any_null_values_function', $array);
    
    print_r(array_values($array));