Bonjour,

Voilà après plus de 2 heures de recherches sur la doc de php.net et sur google sur les tableaux, je n'arrive toujours pas à trouver la solution à mon problème. Voilà un code vous montrant ce que je veux faire :

<?php
$var1 = 200;
$array1 = array(
    0 => 'Auth',
    1 => 'user',
    2 => 'id'
);
// Du code permettant de générer le tableau n°2 comme ça
$array2'Auth']'user']'id'] = $var1;

En gros ce que je veux faire, c'est qu'en appelant une fonction write(200, 'Auth.user.id'), ça fasse $array'Auth']'user']'id'] = 200;
Donc je pense qu'il faut faire un $array1 = explode('.', $string); pour obtenir un tableau contenant les valeurs (on ne connait pas le nombre de valeurs) et on les "transforme" en clé en faisant $array2'Auth']'user']'id'] = $uneValeur

Merci d'avance !

5 réponses


Je ne comprends pas ton problème :/

Moi non plus ... peut tu être plus précis ? Nous renseigner sur ce que tu veux faire ? Quelle en est l'utilité ?

Bonjour,

Tu as mal défini ton tableau, en effet en faisant

$array1 = array(
    0 => 'Auth',
    1 => 'user',
    2 => 'id'
);

tu obtien un tableau de ce type:

$array1[0] = 'Auth'
$array1[1] = 'user'
$array1[2] = 'id'

Pour obtenir

$array2'Auth']'user']'id']

il te faut

$array2 = array(
    'Auth' => array(
        'user' => array(
            'id' => array()
        )
    );

Cordialement.

Et pour obtenir l'index de ton tableau à partir du string, tu as raison, il faut faire

$array1 = explode('.', $string)

Si dans ton string tu as 'Auth.user.id', il faudrait faire ce genre de chose :
$array2$array[0]]$array[1]]$array[2]] = $var

Du coup ta fonction serait ça :

function write($id, $chemin) {
    $array1 = explode('.', $chemin);
    $array2 = array();
    $array2$array1[0]]$array1[1]]$array1[2]] = $id;
    return $array2;
} 
//appel
$array = write(200, 'Auth.user.id');

Après il faut obligatoirement que le "chemin" soit sous la forme xxx.xxx.xxx. Si il comporte quattre élément (xxx.xxx.xxx.xxx), ça ne fonctionnera pas avec ce que je t'ai donné.

Si tu veux quelque chose de modulable, un tableau ne suffit pas je pense.
Il faudrait passer par un objet

Aureroy
Auteur

Je sais pour sûr qu'il est possible de faire ça avec un nombre d'éléments indéterminés (car laravel le fait), cependant, je n'ai pas trouvé la fonction dans le code source.

Ce que je veux faire, c'est qu'au lieu de faire $_SESSION'Auth']'user']'id'] = 1337; j'ai envie de faire Session::write(1337, 'Auth.user.id');

Cela donnerai un code à peu prêt comme ça :

<?php
class Session{
    final public static function write($var, $way){
        $array1 = explode('.', $way);
        // Tout un cas de code qui me permet à la fin de faire :
        $_SESSION$k1]$k2]$k3]... = $var; // Nombre de clé = count($array1);
    }
}