PHP - Sort and group values of a multidimensional array by uploading multiple files

0

I have the following form that when sending it with multiple images, it generates a multidimensional array with all the data ordered by default.

HTML and PHP form:

<?php

if(array_key_exists('send', $_POST)) {
    echo "<pre>"; print_r($_FILES);
}

?>

<html>
    <body>
        <form enctype="multipart/form-data" action="" method="POST">
            <input name="image[]" type="file" multiple />
            <input type="submit" name="send" value="Send" />
        </form>
    </body>
</html>

When I send it, it generates an array of this type:

$file1 = array(
    'imagen' => array(
        'name'      => array(
            'Image_name',
            'Image_name'
        ),
        'type'      => array(
            'jpg',
            'jpg'
        ),
        'tmp_name'  => array(
            'jpg',
            'jpg'
        ),
        'error'     => array(
            0,
            0
        ),
        'size'      => array(
            '200',
            '200'
        )
    )
);

I need to sort the data with PHP and preferably foreach cycles of this array more easily and that the values can be together.

Example, something similar to this:

$file2 = array(
    array(
        'name' => 'Image_name',
        'type' => 'jpg',
        'tmp_name' => 'jpg',
        'error' => 0,
        'size' => 200
    ),
    array(
        'name' => 'Image_name',
        'type' => 'jpg',
        'tmp_name' => 'jpg',
        'error' => 0,
        'size' => 200
    )
);

I appreciate your help.

    
asked by Learning and sharing 07.05.2017 в 18:49
source

1 answer

1

You can use array_map for that.

Example:

<?php
$file1 = array(
    'imagen' => array(
        'name'      => array(
            'Image_name',
            'Image_name'
        ),
        'type'      => array(
            'jpg',
            'jpg'
        ),
        'tmp_name'  => array(
            'jpg',
            'jpg'
        ),
        'error'     => array(
            0,
            0
        ),
        'size'      => array(
            '200',
            '200'
        )
    )
);

$array = array_map(null, $file1['imagen']['name'], $file1['imagen']['type'], $file1['imagen']['tmp_name'], $file1['imagen']['error'], $file1['imagen']['size']);


print_r($array);

Result:

Array
(
    [0] => Array
        (
            [0] => Image_name
            [1] => jpg
            [2] => jpg
            [3] => 0
            [4] => 200
        )

    [1] => Array
        (
            [0] => Image_name
            [1] => jpg
            [2] => jpg
            [3] => 0
            [4] => 200
        )

)

If you want to keep the keys of the array:

<?php
$file1 = array(
    'imagen' => array(
        'name'      => array(
            'Image_name',
            'Image_name'
        ),
        'type'      => array(
            'jpg',
            'jpg'
        ),
        'tmp_name'  => array(
            'jpg',
            'jpg'
        ),
        'error'     => array(
            0,
            0
        ),
        'size'      => array(
            '200',
            '200'
        )
    )
);


function array_map_key($name, $type, $tmp_name, $error, $size){
        $tmp_array['name']  = $name;
        $tmp_array['type']  = $type;
        $tmp_array['tmp_name'] = $tmp_name;
        $tmp_array['error']     = $error;
        $tmp_array['size']  = $size;
        return $tmp_array;
}

$array = array_map('array_map_key', $file1['imagen']['name'], $file1['imagen']['type'], $file1['imagen']['tmp_name'], $file1['imagen']['error'], $file1['imagen']['size']);


print_r($array);

Result:

Array
(
    [0] => Array
        (
            [name] => Image_name
            [type] => jpg
            [tmp_name] => jpg
            [error] => 0
            [size] => 200
        )

    [1] => Array
        (
            [name] => Image_name
            [type] => jpg
            [tmp_name] => jpg
            [error] => 0
            [size] => 200
        )

)
    
answered by 08.05.2017 / 12:22
source