从foreach中将数据提取到数组中

时间:2014-09-11 18:41:51

标签: php arrays pdo foreach

请放轻松我,这是我的第一次,显然我不知道我在做什么......

我使用在线发现的以下脚本上传文件并将上传信息写入数据库,我想将$ file_name信息收集到另一个数组中,以便在内部函数中使用此代码块之外。我搜索得很高,但我的搜索都没有成功。我想出了如何从if语句中打印$ file_name,但不是在它和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";
    }
}

?>

3 个答案:

答案 0 :(得分:0)

在循环之前设置一个数组:

$file_name_array = array();

将以下代码放在$ file_name之后的行上。

$file_name_array[] = $file_name;

这将为您提供一个包含$ file_name内容的数组,并将在每次传递时添加到每个数组中。

然后你可以用数组做任何你想做的事。

答案 1 :(得分:0)

声明一个数组:

$file_names();

$file_name之后在循环中添加此行:

$file_names[] = $file_name;

$file_names会为您提供所有文件的名称。

答案 2 :(得分:0)

为了你的理解(如你所说,你是新人)

在PHP中 可以使用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 Arrays