繁体   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