2 votes

Comment faire une boucle dans un tableau multidimensionnel de $_FILES ?

J'utilise Dropzone pour télécharger les fichiers dans mon dossier. J'ai réussi à obtenir le tableau des fichiers.

   foreach($_FILES as $file) {
       print_r($file);
    }

Sortie de courant :

Array
(
    [name] => Array
        (
            [0] => Image.PNG
            [1] => sadssadsa.PNG
        )

    [type] => Array
        (
            [0] => image/png
            [1] => image/png
        )

    [tmp_name] => Array
        (
            [0] => C:\Users\CH MANAN\AppData\Local\Temp\php48B6.tmp
            [1] => C:\Users\CH MANAN\AppData\Local\Temp\php48B7.tmp
        )

    [error] => Array
        (
            [0] => 0
            [1] => 0
        )

    [size] => Array
        (
            [0] => 291647
            [1] => 112790
        )
)

Résultat attendu :

array
(
    [0] => array
    (
        [name] => Image.PNG
        [type] => image/png
        [tmp_name] => C:\Users\CH MANAN\AppData\Local\Temp\php48B6.tmp
        [error] => 0
        [size] => 291647
    )

    [1] => array
    (
        [name] => sadssadsa.PNG
        [type] => image/png
        [tmp_name] => C:\Users\CH MANAN\AppData\Local\Temp\php48B7.tmp
        [error] => 0
        [size] => 112790
    )
)

J'ai essayé plusieurs boucles dans la boucle parent mais je n'ai pas obtenu les résultats escomptés. Quelqu'un peut m'aider.

2voto

dWinder Points 6461

Vous pouvez utiliser ceci :

$keys = array_keys($_FILES); // get all the fields name
$res = array_map(null, ...array_values($_FILES)); // group the array by each file
$res = array_map(function ($e) use ($keys) {return array_combine($keys, $e);}, $res); // insert the field name to result array

Documentation :

tableau de clés , tableau de correspondance y tableau-combinaison

Exemple concret : 3v4l

1voto

kuh-chan Points 1157

Regardez cet exemple :

$source = [
    'name' => [
        'test1',
        'test2'
    ],
    'type' => [
        'jpg',
        'png'
    ]
];
$result = [];

foreach ($source as $key => $subArray) {
    foreach ($subArray as $index => $value) {
        if (!array_key_exists($index, $result)) {
            $result[$index] = [];
        }
        $result[$index][$key] = $value;
    }
}

var_dump($result);

il regarde d'abord l'index (du fichier). Si l'index n'existe pas dans le fichier $result il sera ajouté. Ensuite, il ajoute la clé avec la valeur à l'index correspondant.

vous devriez travailler sur les bases (manipulation de tableaux multidimensionnels, etc.) avant de progresser. avez-vous un tutoriel ou quelque chose d'autre que vous suivez et dont vous vous inspirez ?

1voto

Andreas Points 13389

Vous pouvez boucler le tableau et utiliser array_combine et array_column pour transformer le tableau.

foreach($_FILES as $file) {
    $keys = array_keys($file);
    foreach($file['name'] as $key => $f){
        $new[] = array_combine($keys, array_column($file, $key));
    }
}
var_dump($new);

Voir l'exemple de travail :
https://3v4l.org/6lL8J

0voto

u_mulder Points 4610

La sortie pour $_FILES que vous voyez est un standard sortie pour plusieurs fichiers téléchargés. Vous pouvez itérer sur un sous-réseau de $_FILES (par exemple name ) et obtenir les valeurs d'autres sous-réseaux sous la même clé :

foreach ($_FILES['name'] as $key => $value) {
    echo $value, $_FILES['error'][$key], $_FILES['tmp_name'][$key];   // etc
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X