11
votes

non défini un élément d'un tableau par référence

Je peux accéder n'importe où dans le réseau multidimensionnel d'une matrice via une méthode de référence. Et je peux changer la valeur de sa valeur. Par exemple: xxx

mais, je ne peux pas détruire la section de cette section: xxx

y a-t-il une solution?


0 commentaires

4 Réponses :


6
votes

OK, meilleure réponse je pense. Afin de non défini, vous devez faire référence à la matrice de conteneur, puis non définissez l'élément dans le tableau;

I.e. P>

$value = & $this->getFromArray('type.conf');

unset  $value['host'];


1 commentaires

Oui - Si vous prenez une référence à une valeur dans un tableau, PHP vous permet de mettre à jour la valeur via cette référence, mais cela ne vous permet pas de supprimer la saisie de la matrice par non défini la référence. Voir par exemple 3v4l.org/osyck



2
votes

Les références ne sont pas comme des liaisons difficiles. Si vous non définissez une référence, cela ne doit pas non définir la valeur d'origine.

class Config
{
    // ...
}

$config = new Config(array(
    'db' => array(
        'name' => 'mydatabase',
        'user' => 'root',
        'pass' => '12345',
    )
));

$config->get('db.user');
$config->set('db.user', 'newuser');
$config->unset('db.user');
//...


1 commentaires

Les références sont comme des liaisons difficiles. Si vous modifiez la deuxième référence, cela change la valeur dans la première. Si vous supprimez la deuxième référence, il ne supprime pas le premier. Ceci est à peu près exactement analogue aux liens difficiles dans un système de fichiers.



0
votes

Créer des fonctions pour mon cadre, pensez-vous qu'ils vous détruisent.

1. Fonction Définir la valeur dans la matrice en utilisant la référence pour la navigation de
- Si la référence se terminant par nom / clé, ce nom / la clé sera une valeur de réglage égale
- Si la référence se terminant par Délimiteur, Nom / Key sera une matrice avec la valeur de réglage xxx

2. Fonction Définir la valeur non définie de la matrice à l'aide de référence

- Si la fin de référence est délimiter, alors ne sera pas définitivement variable avec le nom / la touche Befor Délimiter
- Un moment d'utilisation de cette fonction: vous avez besoin d'une matrice de mise à jour par résultat renvoyé de la fonction (à la fin de l'exemple de code) xxx p.s. Désolé pour mon anglais pur


0 commentaires

1
votes

Voici ma fonction de déséquiper les touches imbriquées

public function unsetKey(string $dotSeparatedKey)
{
    $keys = explode('.', $dotSeparatedKey);
    $pointer = &$this->data;
    $current = false; // just to make code sniffer happy
    // we traverse all but the last key
    while (($current = array_shift($keys)) && (count($keys) > 0)) {
        // if some key is missing all the subkeys will be already unset
        if (!array_key_exists($current, $pointer)) {
            // is already unset somewhere along the way
            return;
        }
        // set pointer to new, deeper level
        // called for all but last key
        $pointer = &$pointer[$current];
    }
    // handles empty input string
    if ($current) {
        // we finally unset what we wanted
        unset($pointer[$current]);
    }
}


0 commentaires