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: mais, je ne peux pas détruire la section de cette section: p> y a-t-il une solution? p> p>
4 Réponses :
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'];
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 code> la référence. Voir par exemple 3v4l.org/osyck
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'); //...
Les références sont i> 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.
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 p> 2. Fonction Définir la valeur non définie de la matrice à l'aide de référence p>
- 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
- 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 p>
- 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) p>
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]); } }