Convertir var_dump de tableau à tableau de variables
Je n'ai jamais vraiment réfléchi à ce sujet jusqu'à aujourd'hui, mais après recherche sur le web je n'ai pas vraiment trouver quelque chose. Peut-être que je n'étais pas libellé dans la recherche.
Donné un tableau (de plusieurs dimensions ou pas):
$data = array('this' => array('is' => 'the'), 'challenge' => array('for' => array('you')));
Quand var_dumped:
array(2) { ["this"]=> array(1) { ["is"]=> string(3) "the" } ["challenge"]=> array(1) { ["for"]=> array(1) { [0]=> string(3) "you" } } }
Le défi est celle-ci: Quelle est la meilleure méthode optimisée pour recompiler le tableau pour une durée de tableau pour PHP? Comme un undump_var()
fonction. Si les données sont sur une seule ligne de résultat dans un navigateur ou si elle contient des sauts de ligne de sortie à la borne.
Est-ce juste une question de regex? Ou est-il un autre moyen? Je suis à la recherche de la créativité.
Mise à JOUR: Note. Je suis familier avec serialize et unserialize gens. Je ne suis pas à la recherche de solutions alternatives. C'est un code défi pour voir si cela peut être fait en une optimisation et de création. Donc sérialiser et var_export ne sont pas des solutions ici. Ils ne sont de la meilleure des réponses.
C'est certainement possible, mais il ne va pas être facile car la syntaxe n'est pas destiné à être une machine à analysables. Lorsque vous avez des choses comme
string(8) "Foo"bar"
et d'autres bizarre bord des cas, il va le faire assez faciles à mettre en œuvre dans un fiable manoir... Si il y a des solutions élégantes, j'aimerais les voir. Mais se rendre compte que la plupart des solutions de travail sera probablement assez long et un peu juste de la logique à l'intérieur...Quel est le problème avec
var_export()
?Rien... sauf que cette question n'est pas sur l'utilisation de solutions de rechange à var_dump. Il s'agit de prendre un déjà var_dumped chaîne et de le retourner à l'état où il était avant d'être var_dumped.
Est-ce juste moi ou est le "Quand var_dumped:" exemple pas fait, ce serait sous-évaluées?
OriginalL'auteur Chuck Burgess | 2010-08-20
Vous devez vous connecter pour publier un commentaire.
var_export
ouserialize
est ce que vous cherchez.var_export
rendra un PHP parsable la syntaxe de tableau, etserialize
rendra, non lisible par l'homme, mais réversible "tableau à la chaîne" conversion...Modifier Bien, pour le défi:
En gros, je convertir le résultat dans une chaîne sérialisée (et puis unserialize il). Je ne prétends pas que cela soit parfait, mais il semble fonctionner sur certains assez complexe de structures que j'ai essayé...
Je l'ai testé sur une structure complexe comme:
Je pense que vous avez mal compris la question. Le défi est de renverser le var_dump dans un tableau. Je suis familier avec serialize() et unserialize()... et oui, ils sont de loin les meilleures options. C'est un code de défi. Peut-être que ça ne vaut pas l'effort, mais je voulais voir si il pourrait être fait de manière optimisée de manière créative. Je ne suis pas à la recherche d'une autre solution.
C'est étrange, que voulez-vous faire exactement?
Donc le titre de votre question doit être Code Défi - Convertir var_dump de retour à la matrice/variable
bonjour, votre méthode ne fonctionne pas sur Flickr var_dump tableau. Warning: strpos() s'attend à ce paramètre 1 pour être string, array donné dans /opt/lampp/htdocs/phpflickr/example.php sur la ligne 28 Avis: Tableau de conversion de chaîne de caractères dans /opt/lampp/htdocs/phpflickr/example.php sur la ligne 59 Avertissement: unserialize() s'attend à ce paramètre 1 pour être string, array donné dans /opt/lampp/htdocs/phpflickr/example.php sur la ligne 84
OriginalL'auteur ircmaxell
Il n'y a pas d'autre moyen que le manuel de l'analyse selon le type.
Je n'ai pas ajouter le support pour les objets, mais il est très similaire à la tableaux de l'un; vous avez juste besoin de faire un peu de réflexion de la magie à remplir non seulement les propriétés publiques et pour ne pas déclencher le constructeur.
EDIT: Ajout du support pour les objets... la Réflexion de la magie...
(Ici ya beaucoup de "magie" des nombres lors de l'incrémentation de la chaîne de position contre
$i
, la plupart du temps simplement les longueurs de chaîne de mots clés et de quelques parenthèses etc.)'string(6) "ab};cd"'
retourned"
.oh, c'était une stupide erreur et a écrit juste un
strlen()
trop au mauvais endroit. Mieux? — Je ne l'avais pas remarquer, comme je l'ai toujours testé avec des chaînes de longueur 1...Mod Remarque: Cette réponse a été fusionné dans à cette autre question Avec la vérification de la fois le demandeur et a répondu, j'ai marqué comme dupe et fusionnés.
Je ne reçois pas mon bounty maintenant 🙁
</joking>
Merci pour la fusion, est bien maintenant 🙂hehe... je n'ai laisser @georg sais que si il voulait, il pourrait ajouter la prime ici! 😉 Mais oui, merci!
OriginalL'auteur bwoebi
Si vous souhaitez encoder/décoder un tableau comme cela, vous pouvez soit utiliser
var_export()
, ce qui génère une sortie en PHP du tableau, par exemple:pourrait être le résultat. Vous devez utiliser
eval()
pour obtenir le tableau, si, et c'est potentiellement dangereux (surtout depuiseval()
vraiment exécute le code PHP, donc une simple injection de code pourrait faire les pirates en mesure de prendre le contrôle de votre script PHP).Certaines des solutions encore meilleures sont
serialize()
, ce qui crée une version sérialisée de tout tableau ou d'un objet; etjson_encode()
, qui code pour un tableau ou d'un objet avec la JSON format (ce qui est plus préféré pour l'échange de données entre les différentes langues).OriginalL'auteur Frxstrem
L'astuce est de faire correspondre les par les morceaux de code et
"strings"
, et sur les chaînes de ne rien faire, mais sinon, ne les remplacements:sorties:
(retrait croissant touches numériques commençant à 0 prend un peu plus de la comptabilité, ce qui peut être fait dans le
repl
fonction.)ps. cela ne résout pas le problème de chaînes contenant
"
, mais comme il semble que var_dump n'échappe pas à la chaîne de contenu, il n'y a aucun moyen de le résoudre de manière fiable. (vous pourriez\["[^"]*"\]
mais une chaîne de caractères peut contenir des"]
ainsi)array('you',2)
), Il sera affiché en tant que int(5) mais devrait reprendre à partir de votre fonction en tant que de 5.J'ai juste pris ton exemple pour le faire fonctionner. Remplacement de
int\(\d+\)
avec le nombre ne pas sembler beaucoup d'un défi. voir mise à jour de réponse.Superbe! Très bien fait et dans les petites code optimisé! Pour info: Il manque une virgule après "\\2".
OriginalL'auteur mvds
Utiliser regexp pour modifier array(.) { (.*) } pour array($1) et eval le code, ce n'est pas si facile comme l'a écrit parce que Vous avez à traiter avec l'appariement des crochets etc., juste un indice sur la façon de trouver une solution 😉
non, Vous n'avez pas à traiter avec de la ficelle de l'analyseur, regexp ont quelques superbes fonctions comme ungreed/global des drapeaux etc, il peut être fait avec un seul regexp avec un bon sertie drapeaux 🙂
le BBcode analyseurs sont créés sur la base de regexp, et de bien travailler sans état machne 😉 il suffit de considérer le tableau(.) {' et '}' comme ouvrir/fermer les balises 🙂
Puis montrez-moi une seule regex qui vous permet de convertir tous valides var_dumped de données native analysée php... je vais vous avouer que je suis mal si vous pouvez me montrer un exemple d'une regex qui peut faire face à:
array(1) { ["foo}[bar]"] => string(4) "baz{" }
Vous avez probablement raison, il ne peut être fait que par une regexp, mais encore, Vous pouvez utiliser une regexp par "tag" où l'étiquette est l'une des: array(.) ; string(.) ; entier(.) etc. et analyse la sortie dans l'ordre correct (types simples -> les tableaux), mais encore il n'est pas possible de "analyse" var_dumped des objets et d'autres non-starndard structures, pour cela, nous avons sérialiser et d'autres choses
OriginalL'auteur canni
Je pense que vous êtes à la recherche pour le
serialize
fonction:Il vous permet d'enregistrer le contenu du tableau en format lisible et plus tard, vous pouvez lire le tableau de retour avec
unserialize
fonction.À l'aide de ces fonctions, vous pouvez stocker/récupérer les matrices de même dans le texte plat/fichiers ainsi que de la base de données.
OriginalL'auteur Sarfraz
Mis à jour à ne PAS UTILISER create_function, car il est OBSOLÈTE depuis PHP 7.2.0. Au lieu de cela, il est remplacé à l'utilisation d'une fonction anonyme:
OriginalL'auteur Aurimas Rekštys