2010-09-28 2 views
1

J'ai ci-dessous tableau multidimentionnellePhp multidimentionnelle Tableau

$testarray=Array 
(
    1 => Array 
     (
      0 => 'A', 
      1 => 'B' 
     ), 

    2 => Array 
     (
      0 => 'A', 
      1 => 'C' 
     ), 

    3 => Array 
     (
      0 => 'A', 
      1 => 'C', 
      2 => 'D' 
     ), 

    4 => Array 
     (
      0 => 'A', 
      1 => 'C', 
      2 => 'E' 
     ), 
    5 => Array 
     (
      0 => 'X', 
      1 => 'Y' 
     ), 

    6 => Array 
     (
      0 => 'X', 
      1 => 'Y', 
      2 => 'Z' 
     ), 

    7 => Array 
     (
      0 => 'X', 
      1 => 'Y', 
      2 => 'ZZ' 
     ), 

    8 => Array 
     (
      0 => 'P', 
      1 => 'Q' 
     ), 

    9 => Array 
     (
      0 => 'P', 
      1 => 'Q', 
      2 => 'R' 
     ), 

    10 => Array 
     (
      0 => 'P', 
      1 => 'Q', 
      2 => 'R', 
      3 => 'S' 
     ) 
); 

Je dois générer ci-dessous tableau à l'aide $testarray (tableau aultidimentional):

array(A=array(B, C=array(D,E)), 
X=array(Y=>array(Z,ZZ)), 
P=array(Q=>array(R=>array(S)) 
+0

S'il vous plaît parler dans le but de faire une telle partie illogique. Je ne peux pas conclure quelle est la principale raison de faire cela. –

+0

vous devriez reformuler votre question pour mieux expliquer la logique derrière la transformation que vous devez effectuer – Eineki

+0

En fait, j'ai stocké la profondeur des catégories et sous-catégories dans le format suivant pour chaque enregistrement. A | B (première rangée) A | C A | C | D A | C | E X | Y X | Y | Z X | Y | ZZ P | Q P | Q | R P | Q | R | S (matrice 10) Après avoir éclaté chaque matrice en utilisant | délimiteur, j'ai eu $ testarray. Et j'ai besoin de stocker tableau de sortie au format json pour un traitement ultérieur – Rahul

Répondre

0

au moins dans la version de PHP que j'utilise que vous pouvez faire quelque chose comme

$testArray = Array(
    1 => Array(
     'A'=> Array(
       //Value of A here 
     ) 
     'B' => Array(
       //Value of B here 
     ) 
); 

Pour y accéder, vous pouvez écrireSi vous pouvez changer la valeur de $ testArray cela devrait aider.

0

Cela devrait fonctionner. Toutes les améliorations (et explications) seraient appréciées.

foreach($testarray as $values) { 
    $depth = count($values); 
    $ref =& $array; 

    for($i=0; $i<$depth; $i++) { 
     if($i == $depth-1) { 
      $ref[] = $values[$i]; 
     } 
     else { 
      if(!is_array($ref) || !array_key_exists($values[$i], $ref)) { 
       $ref[$values[$i]] = array(); 
      } 
      if(($key = array_search($values[$i], $ref)) !== FALSE) { 
       unset($ref[$key]); 
      } 
      $ref =& $ref[$values[$i]]; 
     } 
    } 
} 

Sortie:

array 
    'A' => 
    array 
     0 => string 'B' (length=1) 
     'C' => 
     array 
      0 => string 'D' (length=1) 
      1 => string 'E' (length=1) 
    'X' => 
    array 
     'Y' => 
     array 
      0 => string 'Z' (length=1) 
      1 => string 'ZZ' (length=2) 
    'P' => 
    array 
     'Q' => 
     array 
      'R' => 
      array 
       0 => string 'S' (length=1)