10
votes

PHP SimplexMellement au tableau: valeur null

J'ai suivi XML:

'email' => NULL


8 commentaires

Le problème est que e-mail n'est pas NULL. C'est vide. Pour avoir null, le XML devrait être


@webnoob c'est vrai! :) Mais malheureusement, vous n'aurez toujours pas l'attendu null


@ hek2mgl - ah ok, j'ai supposé que ce serait :(. Ok, une autre idée. Chargez le XML dans une chaîne, utilisez-la dans une ficelle, utilisez-la pour éteindre les étiquettes qui n'ont pas de valeurs, puis d'analyser. S'ils n'y sont pas là, Vous pouvez les traiter comme null.


@webnoob vous fera désordonner lorsque le XML grandit. Vous devrez également modifier la regex pour chaque format XML. Je pense actuellement à un analyseur Sax. Cela permettrait d'économiser le PO de Foreach Boucles dans PHP. La boucle serait effectuée en code C de l'extension. Aussi, il devrait être plus rapide que l'approche JSON_Decode / JSON_ENCODE


Hmm, bons points. Bien que je dois poser la question à la question de savoir pourquoi null est si important. Pourquoi ne pas rechercher "" . Pourrait même avoir une fonction d'assistance pour le faire pour vous ...


Les gars, merci pour le conseil avec - je vais le corriger. @webnoob: la valeur NULL est importante, car la couche PHP fait partie d'un projet plus gros, où nous communiquons à l'aide du protocole d'épargne et nous envoyons une demande à l'aide de tableaux. J'aimerais que la valeur nominale XML nul soit représentée comme PHP NULL à l'intérieur de la matrice imbriquée - ou quelque chose comme ça;)


@ Hek2MGL, j'ai bien peur que l'idée de l'analyseur saxe ne soit pas plus simple / plus claire que des tableaux d'itération dans la recherche.


@tkoomzaaskz J'ai testé à l'aide d'un analyseur SAX. J'ai utilisé le flux RSS de ce site . Il a fallu presque la même chose que l'approche JSON_DECODE (0,025 seconde) signifie que cela devrait être vraiment plus rapide que d'utiliser des produits. Mais cela doit être testé.


3 Réponses :


9
votes

Je ne peux pas ajouter de commentaire, mais je pense que cela fonctionnera pour vous, il devrait être plus rapide qu'une regex ou une boucle: xxx

un tableau vide dans JSON est représenté par "< Code> [] ". Parfois, les matrices sont analysées comme des objets, dans ce cas (ou comme une secousse), vous pouvez remplacer ": {} " aussi.


2 commentaires

Donc, le résultat global de ce que je veux serait: json_decode (str_replace (': []', ': null', json_encode ($ array))) - sonne comme une bonne idée


Il devrait être "email": {} au lieu de "email": [] mais de toute façon merci pour votre idée



0
votes

Vérifiez la performance Str_replace vs boucle récursive

  • itérations : 100000
  • longueur XML : 4114 octets
  • Durée d'un script Init : ~ 1.2264486691986E-6 secondes
  • JSON Encode / DecoDe Time : ~ 9.8956169957496E-5 secondes
  • str_replace temps moyen: 0.00010692856433176 secondes
  • boucle récursive temps moyen: 0.00011844366600813 secondes

    le str_replace rapidement sur ~ 0.00001 secondes. La différence sera perceptible dans de nombreux appels


0 commentaires

1
votes

Un Objet SimplexMlelement sera cassette à un tableau vide. Vous pouvez modifier cela en s'étendant à partir de SimplexMlelement et implémenter le interface jsonserializable et jeter un coup à null . xxx

the simpplexml_load_string Pour renvoyer un objet de JSONXMLElement Classe xxx

Crédit: hakre


0 commentaires