如何从php数组右侧删除空值?

时间:2019-12-12 10:47:01

标签: php laravel

我有以下元素组成的数组

[null, null, 1, 4, 6, null, null, null, null]

我如何才能从数组中仅删除右侧的null,使其变为

[null, null, 1, 4, 6]

我尝试了array_filter,但是它删除了所有伪造的值

$arr = array_filter([null, null, 1, 4, 6, null, null, null, null]);

结果是

$arr = [1, 4, 6]

5 个答案:

答案 0 :(得分:2)

您可以利用该array_filter结果本身。您将获得所有非NULL的值。因此,从该数组中获取last key,这是array_slice函数的最终限制。

<?php

$arr = [null, null, 1, 4, 6, null, null, null, null,null];

$filtered_arr = array_filter($arr);
end($filtered_arr);
$limit = key($filtered_arr) + 1;
$arr = array_slice($arr,0,$limit);
print_r($arr);

演示: https://3v4l.org/RVcjt

更新

如果输入数组包含0,则以上答案可能会导致错误的结果。 要纠正这一点,我们只能从数组中过滤掉NULL值。

<?php

$arr = [null, null, 1, 4, 6, null, 0, null, null,null];

$filtered_arr = array_filter($arr,function($value){
    return !is_null($value);
});
end($filtered_arr);
$limit = key($filtered_arr) + 1;
$arr = array_slice($arr,0,$limit);
print_r($arr);

演示: https://3v4l.org/S5a96

答案 1 :(得分:1)

您可以尝试以下代码

$notNull = true;
$item = [null, null, 1, 4, 6, null, null, null, null];
$output = array();
for($i=count($item)-1;$i>=0;$i--){

    if( is_null( $item[$i]) &&  $notNull ){
        continue;
    }
    else{
        $notNull = false;
        $output[] = $item[$i];  
    }
}
$output = array_reverse($output);

Demo Link

答案 2 :(得分:0)

您可以使用array_pop()删除结尾的项,直到遇到非null值(或空数组),然后将最后一项推回...

$array = [null, null, 1, 4, 6, null, null, null, null];

while( count($array) > 0 && ($end = array_pop($array)) === null );
array_push($array, $end);
print_r($array);

这给...

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

答案 3 :(得分:0)

尝试一下:

class DocumentURL: UIActivityItemProvider {
    let temporaryURL: URL
    let document: DocumentAndDemandForm
    let data : Data

    init(document: DocumentAndDemandForm,data:Data) {
        self.document = document
        self.data = data
        self.temporaryURL = URL(fileURLWithPath: NSTemporaryDirectory() + "\(document.downloadName == "" ? document.description ?? "ek" : document.downloadName).pdf")
        super.init(placeholderItem: temporaryURL)
    }
    override var item: Any {
        get {
            try? data.write(to: temporaryURL)
            return temporaryURL
        }
    }
}

func share(isSave:Bool = false) {
        if let data = pdfView.document?.dataRepresentation(){
            let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [DocumentURL.init(document: self.document, data: data)], applicationActivities: nil)
            activityViewController.popoverPresentationController?.sourceView = self.pdfView
            if isSave{
                activityViewController.excludedActivityTypes = [.airDrop,.assignToContact,.copyToPasteboard,.mail,.message,.openInIBooks,.postToFacebook,.postToFlickr,.postToTencentWeibo,.postToTwitter,.postToVimeo,.postToWeibo]
            }
            DispatchQueue.main.async {
                self.controller.present(activityViewController, animated: true, completion: {
                    self.shareDocument = false

                })
            }
        }
    }

它将为您提供所需的结果:

$arr = [null, null, 1, 4, 6, null, null, null, null];
$arr = array_reverse($arr);
foreach($arr as $a){
    if(is_null($a))
        array_shift($arr);
    else break;
}

$arr = array_reverse($arr);
print_r($arr);

答案 4 :(得分:0)

另一种方式可以

<?php
$array = [NULL, NULL, 1, 4, 6, NULL, NULL, NULL, NULL];

function trimRight($array) {
    $arr = $array;
    for ($i = count($array)-1; $i >= 0; $i--) {
        if( !is_null($array[$i])) {
            $arr = $array;
        } else {
            unset($array[$i]);
        }
    }
    return $arr;
}
var_dump(trimRight($array));
?>

输出

array(5) { [0]=> NULL [1]=> NULL [2]=> int(1) [3]=> int(4) [4]=> int(6) }