1

Voici mon dilemme et merci d'avance! J'essaye de créer une variable variable ou quelque chose de ce genre pour un tableau associatif dynamique et avoir un temps fou pour comprendre comment faire cela. Je crée un explorateur de fichiers donc j'utilise les répertoires comme les clés du tableau.PHP Ajouter dynamiquement des dimensions à un tableau en utilisant pour la boucle

Exemple:
Je dois obtenir ce que je puisse lui attribuer des valeurs

$dir_list['root']['folder1']['folder2'] = value; 

donc je pensais faire quelque chose le long de ces lignes ...

if ($handle2 = @opendir($theDir.'/'.$file)) 
{ 
    $tmp_dir_url = explode($theDir); 
    for ($k = 1; $k < sizeof ($tmp_dir_url); $k++) 
    { 
     $dir_list [ $dir_array [ sizeof ($dir_array) - 1 ] ][$tmp_dir_url[$k]] 
    } 

c'est là que je se coincer, j'ai besoin d'ajouter dynamiquement une nouvelle dimension au tableau durring chaque itération à travers la boucle for ... mais je n'ai aucune idée comment

Répondre

2

Je voudrais utiliser une approche récursive comme ceci:

function read_dir_recursive($dir) { 
    $results = array('subdirs' => array(), 'files' => array()); 
    foreach(scandir($dir) as $item) { 
     // skip . & .. 
     if (preg_match('/^\.\.?$/', $item)) 
      continue; 
     $full = "$dir/$item"; 
     if (is_dir($full)) 
      $results['subdirs'][$item] = scan_dir_recursive($full); 
     else 
      $results['files'][] = $item; 
    } 
} 

Le code est non testé comme je ne PHP ici pour essayer.

Cheers,
Haggui

+0

pour non testé c'était presque parfait haha, merci! – BinarySolo00100

0

Vous pouvez librement placer un tableau dans la cellule du tableau, en ajoutant effectivement 1 dimension pour les répertoires nécessaires seulement.

I.e.

$a['x'] = 'text'; 
$a['y'] = new array('q', 'w'); 

print($a['x']); 
print($a['y']['q']); 
0

Comment cela? Cela va empiler les valeurs du tableau en plusieurs dimensions.

$keys = array(
'year', 
'make', 
'model', 
'submodel', 
); 

$array = array(); print_r(array_concatenate($array, $keys)); function array_concatenate($array, $keys){ if(count($keys) === 0){ return $array; } $key = array_shift($keys); $array[$key] = array(); $array[$key] = array_concatenate($array[$key], $keys); return $array; }

Dans mon cas, je savais ce que je voulais clés $ pour contenir. Je l'ai utilisé pour prendre la place de:

if(isset($array[$key0]) && isset($array[$key0][$key1] && isset($array[$key0][$key1][$key2])){ // do this }

Vive.

Questions connexes