我有以下元素组成的数组
[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]
答案 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);
更新:
如果输入数组包含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);
答案 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);
答案 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) }