Weird format of $_FILES array when having multiple fields

前端 未结 3 1689
挽巷
挽巷 2020-12-21 05:01

I have a form that has some fields like this:





        
相关标签:
3条回答
  • 2020-12-21 05:29

    This is completely normal format, it always has been like that. If you want a different structure, you can transform it in your application, like this:

    <?php
    
    $another_format = array();
    for ($i=0; $i<count($_FILES['images']['name']); $i++){
        $another_format[$i] = array(
            'name' => $_FILES['images']['name'][$i],
            'type' => $_FILES['images']['type'][$i],
            'tmp_name' => $_FILES['images']['tmp_name'][$i],
            'error' => $_FILES['images']['error'][$i],
            'size' => $_FILES['images']['size'][$i]
        );
    }
    
    ?>
    

    Good luck!

    0 讨论(0)
  • 2020-12-21 05:37

    You don't need to, you can easily work with this structure:

    foreach ($_FILES['images']['name'] as $key => $name) {
        $type = $_FILES['images']['type'][$key];
        $tmp_name = $_FILES['images']['tmp_name'][$key];
        $error = $_FILES['images']['error'][$key];
        $size = $_FILES['images']['size'][$key];
    
        // Do your stuff
    }
    
    0 讨论(0)
  • 2020-12-21 05:44

    Here is a function that does that and works with name attributes as:

    name="artist[images][]"
    name="images[]"
    name="image"
    

    Also works with more than one file field:

    <input type="file" name="artist[images][]" multiple>
    <input type="file" name="artist[logos][]" multiple>
    

    PHP:

    function get_files( $array ) 
    {
        $output = array();
        foreach ( $array as $base_key => $file ) {
            if ( is_array($file['name']) ) {
                $file_keys = array_keys( $file['name'] );
                foreach ( $file_keys as $file_key ) {
                    if ( is_array( $file['name'][$file_key] ) ) {
                        $keys = array_keys( $file['name'][$file_key] );
                        foreach ( $keys as $key ) {
                            $output[$base_key][$file_key][$key] = array ( 
                                'name' => $file['name'][$file_key][$key], 
                                'type' => $file['type'][$file_key][$key], 
                                'tmp_name' => $file['tmp_name'][$file_key][$key], 
                                'error' => $file['error'][$file_key][$key], 
                                'size' => $file['size'][$file_key][$key] 
                            );
                        }
                    } else $output[$base_key][$file_key] = array( 
                        'name' => $file['name'][$file_key], 
                        'type' => $file['type'][$file_key], 
                        'tmp_name' => $file['tmp_name'][$file_key], 
                        'error' => $file['error'][$file_key], 
                        'size' => $file['size'][$file_key] 
                        );
    
                }
            } else $output[$base_key] = $file;
        }
        return $output;
    }
    
    0 讨论(0)
提交回复
热议问题