2009-06-22 12 views
0

Comment "réorganiser" les clés d'un multi-réseau? Par exemple, j'ai:Déplacement d'un ordre de touches dans un tableau multidimensionnel

$arr["abc"][0] = "val1"; 
$arr["abc"][1] = "val2"; 
$arr["abc"][2] = "val3"; 
$arr["xyz"][0] = "val4"; 
$arr["xyz"][1] = "val5"; 
$arr["xyz"][2] = "val6"; 

Et je veux que ce soit:

$arr[0]["abc"] = "val1"; 
$arr[0]["xyz"] = "val4"; 
$arr[1]["abc"] = "val2"; 
$arr[1]["xyz"] = "val5"; 
$arr[2]["abc"] = "val3"; 
$arr[2]["xyz"] = "val6"; 

Mon effort actuel est:

foreach ($arr as $param => $num) foreach ($num as $val) $newArr[$num][$param] = $val; 

mais il ne semble pas fonctionner. Toute aide serait appréciée. Spécifiquement, j'essaie de parcourir tous les éléments soumis sur $_FILES, car ils ont tous besoin de la même chose. Par défaut, lorsqu'il y a plus d'un <input type="file" name="filedata[]" /> dans un formulaire, ils vont à $_FILES["filedata"]["name"][$index]. ("name" ou tout autre paramètre), donc je ne peux pas faire une boucle à travers chaque $_FILES["filedata"] pour obtenir à tout; ainsi, j'ai besoin des clés de $_FILES["filedata"] inversées.

Répondre

4

Je pense que vous devez toujours saisir les clés dans le second foreach. Essayez quelque chose comme:

foreach($arr as $k1 => $v1) { 
    foreach ($v1 as $k2 => $v2) { 
    $newArray[$k2][$k1] = $v2 
    } 
} 
+0

Whoops, je suis un idiot. Je n'ai même pas regardé le tableau de résultats qu'il voulait. –

0

Il semble que ce que vous cherchez soit array_flip. Voir ici:

http://us3.php.net/manual/en/function.array-flip.php

+0

Je ne suis pas sûr que cela fonctionne, notez que la documentation de cette fonction stipule que les "valeurs de trans doivent être des clés valides, c'est-à-dire qu'elles doivent être soit entières ou chaîne", dans ce cas, l'affiche veut changer clés dans un tableau 2D. L'utilisation de array_flip pour un tableau 2D ne fonctionnerait pas car la valeur de chaque élément du tableau externe est un tableau lui-même, et non une chaîne ou un entier. – Peter

1

avec deux assez simple foreach boucles:

// Original version: 
$arr = array(); 
$arr["abc"][0] = "val1"; 
$arr["abc"][1] = "val2"; 
$arr["abc"][2] = "val3"; 
$arr["xyz"][0] = "val4"; 
$arr["xyz"][1] = "val5"; 
$arr["xyz"][2] = "val6"; 

print_r($arr); 

$newarray = array(); 
// Swap around the keys 
foreach ($arr as $key1 => $val1) { 
    foreach ($val1 as $key2 => $val2) { 
     $newarray[$key2][$key1] = $val2;   
    } 
} 
print_r($newarray); 

est ici l'affichage:

// Display of $arr: 
//Array 
//(
// [abc] => Array 
//  (
//   [0] => val1 
//   [1] => val2 
//   [2] => val3 
//  ) 
// 
// [xyz] => Array 
//  (
//   [0] => val4 
//   [1] => val5 
//   [2] => val6 
//  ) 
// 
//) 



//Display of $newarray: 
//Array 
//(
// [0] => Array 
//  (
//   [abc] => val1 
//   [xyz] => val4 
//  ) 
// 
// [1] => Array 
//  (
//   [abc] => val2 
//   [xyz] => val5 
//  ) 
// 
// [2] => Array 
//  (
//   [abc] => val3 
//   [xyz] => val6 
//  ) 
// 
//) 
Questions connexes