2017-04-21 2 views
0

Je veux trouver un moyen d'explorer le tableau $ _FILES et de récupérer le [type] => tableau dans son intégralité. J'ai essayé un certain nombre d'approches ne trouverez nulle part avec ceci:

$result = preg_grep('/\image\b/', $_FILES); 

Quand je sortie $ result de cette manière:

echo '<pre>'; 
    print_r($result); 
    echo '</pre>'; 

Je reçois le texte suivant:

Array (

Ce qui est bien sûr inutile. J'ai parcouru le manuel, en regardant toutes les fonctions du tableau, mais je n'ai rien trouvé qui fonctionne. Y a-t-il une fonction PHP pour ça? Toute aide sera la bienvenue! Vive,

Shackleton

PS J'ai aussi essayé d'utiliser:

foreach ($_FILES['userfile']['type'] as $key => $value) { 

pour créer mon propre tableau avec la clé et la valeur de chaque fichier téléchargé. Le problème avec cela est que la variable ne créera pas un tableau avec plus d'un - [0] - index car la construction du tableau fait référence à la variable. Cela semble être une impasse.

Répondre

0

Si vous envoyez plusieurs fichiers, vous devez itérer à l'aide _FILES $ seulement, comme ceci:

$types=array(); 
foreach($_FILES as $filename=>$arrayofvalues){ 
    $types[]=$arrayofvalues['type']; 
} 
0

Holla Ricardo, Merci beaucoup, qui fonctionne comme un charme. Je devais aller trouver un moyen d'aplatir le tableau résultant, mais j'ai trouvé une fonction en ligne qui fonctionne. J'avais cherché cette fonction aussi pendant plusieurs jours. Voici ce que je suis venu avec:

// Create an array of only the file type 
$types = array(); 
foreach ($_FILES as $filename => $arrayofvalues) { 
    $types[] = $arrayofvalues['type']; 
} 

// Create a sub-array of types 
foreach($types as $subArray) { 
    foreach($subArray as $val){ 
     $simple[] = $val; 
    } 
} 

echo "Simple images array:"; 
echo '<pre>'; 
print_r($simple); 
echo '</pre>'; 
"<br />"; 

// Get the key & value of just image files 
$images = preg_grep('/\image\b/', $simple); 

// Use the differenc array function to find the indices I want 
$dif = array_diff($simple, $images); 

echo "Difference:"; 
echo '<pre>'; 
print_r($dif); 
echo '</pre>'; 
"<br />"; 

Bien sûr, le print_r() est que je peux voir ce que le code produit. La sortie ressemble à ceci: html Output

Merci encore pour votre aide!

Cheers,

Shackleton

0

Votre approche est un peu la main lourde avec les boucles foreach. J'ai préparé un moyen plus court pour accomplir votre tâche.

L'utilisation de ce tableau:

$FILES=array(
    "file1"=>array("type"=>array("text/plain")), 
    "file2"=>array("type"=>array("image/tiff")), 
    "file3"=>array("type"=>array("")), 
    "file4"=>array("type"=>array("image/png")), 
    "file5"=>array("type"=>array("image/gif")), 
    "file6"=>array("type"=>array("image/jpeg")) 
); 

Vous pouvez avoir votre sortie avec ces deux one-liners:

$simple_images=array_column(array_column($FILES,"type"),0); 
var_export($simple_images); 

echo "\n"; 

$difference=array_filter($simple_images,function($v){return strpos($v,"image")===false;}); 
var_export($difference); 

Sortie:

array (
    0 => 'text/plain', 
    1 => 'image/tiff', 
    2 => '', 
    3 => 'image/png', 
    4 => 'image/gif', 
    5 => 'image/jpeg', 
) 
array (
    0 => 'text/plain', 
    2 => '', 
) 

En référence à votre fonction preg_grep(), il Il vaut mieux éviter d'utiliser regex lorsqu'une autre manipulation de chaîne suffira. Ceci améliorera les performances.

+0

Merci mickmackusa, je vais commencer à jouer avec ça. La semaine dernière, j'ai appris toutes sortes de choses utiles pour les tableaux. Je ne les avais pas beaucoup utilisés dans le passé. Votre code a l'air très simple. Merci encore! – shackleton