簡體   English   中英

從foreach將數據提取到數組中

[英]Extract data into array from foreach

請放心,這是我的第一次,顯然我不知道自己在做什么...

我正在使用以下在線找到的腳本來上傳文件並將上傳信息寫入數據庫,我想將$ file_name信息收集到另一個數組中,以供在爆破功能中的此代碼塊之外使用。 我搜索過高和低,但是搜索失敗。 我想出了如何從if語句內部打印$ file_name(s),而不是在它和php塊之外打印,但是我不知道如何將它變成數組。

任何幫助將不勝感激。

    <?php
if(isset($_FILES['files'])){
    $errors= array();
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_size =$_FILES['files']['size'][$key];
        $file_tmp =$_FILES['files']['tmp_name'][$key];
        $file_type=$_FILES['files']['type'][$key];
        $timestamp= date('Y-m-d G:i:s');
        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }       
        $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)";
        $desired_dir="files";
        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"files/".$file_name);
            }else{                                  //rename the file if another one exist
                $new_dir="files/".$file_name.time();
                 rename($file_tmp,$new_dir) ;               
            }
            $q = $dbo->prepare($query);     
            $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp));

        }else{
                print_r($errors);
        }
    }
    if(empty($error)){
        echo "Success";
    }
}

?>

在循環之前設置一個數組:

$file_name_array = array();

將以下代碼放在$ file_name之后的行上。

$file_name_array[] = $file_name;

這將為您提供一個包含$ file_name上的內容的數組,並在每次傳遞時將其添加到該數組中。

然后,您可以對數組進行任何操作。

聲明一個數組:

$file_names();

$file_name之后的循環內添加以下行:

$file_names[] = $file_name;

$file_names將為您提供所有文件的名稱。

為了您的理解(如您所說,您是新手)

在PHP中 ,可以使用array()語言構造來創建array() 它使用任意數量的逗號分隔key => value對作為參數。

Example #1 A simple array

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

?>

現在,您只需將來自foreach循環的所有切碎數據放入新數組即可,如下所示:

 <?php
if(isset($_FILES['files'])){
    $errors= array();
    $filename_array = array();
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['files']['name'][$key];
        $filename_array[] = $file_name;
          $file_size =$_FILES['files']['size'][$key];
    $file_tmp =$_FILES['files']['tmp_name'][$key];
    $file_type=$_FILES['files']['type'][$key];
    $timestamp= date('Y-m-d G:i:s');
    if($file_size > 2097152){
        $errors[]='File size must be less than 2 MB';
    }       
    $query="INSERT into upload_data (FILE_NAME, FILE_SIZE, FILE_TYPE, timestamp) VALUES(:file_name,:file_size,:file_type, :timestamp)";
    $desired_dir="files";
    if(empty($errors)==true){
        if(is_dir($desired_dir)==false){
            mkdir("$desired_dir", 0700);        // Create directory if it does not exist
        }
        if(is_dir("$desired_dir/".$file_name)==false){
            move_uploaded_file($file_tmp,"files/".$file_name);
        }else{                                  //rename the file if another one exist
            $new_dir="files/".$file_name.time();
             rename($file_tmp,$new_dir) ;               
        }
        $q = $dbo->prepare($query);     
        $q->execute(array(':file_name'=>$file_name,':file_size'=>$file_size,':file_type'=>$file_type, ':timestamp'=>$timestamp));

    }else{
            print_r($errors);
    }
}
if(empty($error)){
    echo "Success";
}
}

?>

現在,在第二個塊中,將文件名獲取為

foreach ($filename_array as $filename) {
    echo $filename;
}

參考了解PHP數組

暫無
暫無

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

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