簡體   English   中英

從$ _FILES數組中刪除空數組元素

[英]Remove empty array elements from the $_FILES array

我有一個相冊,數據庫中有一個“照片”字段,該字段具有序列化數據並以base 64編碼。 我最多可以同時上傳21張照片(多張上傳)。 嘗試在編輯模式下將新照片添加到相冊時,無法將新的$ _FILES數組與數據庫中的舊數組合並。 我只想更新已更改的值。 假設我的相冊中已經有2張圖片,我想添加第3張圖片而不丟失其他2張圖片。 我知道我需要使用unset()來刪除空值,但我認為我沒有正確執行它。 這是我的代碼:

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'edit') {
        //select photo album and get photos and descriptions to be merged with new.
        $album_id           = $_REQUEST['album_id'];    
        $old_photos         = null;
        $old_descriptions   = null;

        $getAlbumQ = mysql_query("select * from albums where id='$album_id'");

        while ($old_album = mysql_fetch_array($getAlbumQ)) {
            $old_photos         = unserialize(base64_decode($old_album['photos']));
            $old_descriptions   = unserialize(base64_decode($old_album['descriptions']));
        }

        if (isset($_POST['album_name']) && isset($_POST['desc'])) {
            $name       = $_POST['album_name'];
            $desc       = $_POST['desc'];
            $idesc      = array();
            $target_path = "../uploads/albums/";



            foreach ($_FILES as $k => $v) {
                //first upload photos
                $path = $target_path . basename($v['name']); 
                if(move_uploaded_file($v['tmp_name'], $path)) {

                    $hasUpload = true;
                }   
            }



            for ($j = 1; $j < 21; $j++) {
                    $img_index  = $j;
                    $img_desc   = $_POST['desc_' . $img_index];
                    $asdf   = $_FILES['image_' . $img_index]['name'];

                    array_push($idesc, $img_desc);          

            }

            foreach( $_FILES['images']['name'] as $key => $value ) { 
                   if( empty($value) ) { 
                                       unset( $_FILES['images']['name'][$key] ); 
                    } 
            } 


            for ($i = 1; $i < 21; $i++) {


            if($_FILES['image_'.$i]['name']!= '')
            {
            $hasUpload = true;

            $presults       = array_merge($old_photos, $_FILES); //THE PROBLEM WITH MERGING ARRAYS OCCURS HERE
            $dresults       = array_merge($old_descriptions, $idesc);

            $images         = base64_encode(serialize($presults));
            $descriptions   = base64_encode(serialize($dresults));
            $posted         = date("Y-m-d H:i:s");
            }
            else {
                $hasUpload = false;

            $presults       = $old_photos;
            $dresults       = $idesc;

            $images         = base64_encode(serialize($presults));
            $descriptions   = base64_encode(serialize($dresults));
            $posted         = date("Y-m-d H:i:s");
            }
        }

        }
    }

我嘗試了類似Muu建議的方法。 將其與自定義合並功能的另一段代碼結合在一起,可以在這里找到http://keithdevens.com/weblog/archive/2003/Mar/30/MergeTwoArrays ,它工作正常! 謝謝你的幫助

只需在for($ i = 1; $ i <21; $ i ++)循環外添加以下代碼行:

//delete empty values for $_FILES array

foreach ($_FILES as $key => $value) {

                    foreach ($value as $k => $v) {
                         if ($k=='name' && $v!='') {
                             break;
                         } else {
                             unset($_FILES[$key]);
                         }
                   }
                 }

//custom array merge function 

function merge(&$a, &$b){
   $keys = array_keys($a);
   foreach($keys as $key){
       if(isset($b[$key])){
           if(is_array($a[$key]) and is_array($b[$key])){
               merge($a[$key],$b[$key]);
           }else{
               $a[$key] = $b[$key];
           }
       }
   }
   $keys = array_keys($b);
   foreach($keys as $key){
       if(!isset($a[$key])){
           $a[$key] = $b[$key];
       }
   }
}

然后而不是array_merge(),而是在for($ i = 1; $ i <21; $ i ++)循環內使用merge():

 $presults       = merge($old_photos, $_FILES);

而不是從數組中刪除空值,為什么不忽略它們呢? 例如:

$nonEmptyArray = array();
foreach ($_FILES as $k => $v) {
    if (!$v) {
        continue;
    }
    $nonEmptyArray[$k] = $v;
}
$_FILES = $nonEmptyArray;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM