Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [simpleXML] funkcja obj2array zle dziala
aleksander
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

Ostrzeżenie: (0%)
-----


witam,

Na php.net znalazłem funkcję która konwertuje obiekt simplexml do tablicy:
  1. <?php
  2. function recursive_obj2array( $obj )
  3. {
  4. $subject_array = array();
  5.  foreach ((array) $obj as $key => $var)
  6.  {
  7.  if (is_object($var))
  8.  {
  9.  if(count((array) $var) == 0)
  10.  {
  11.  $subject_array[$key] = 'NULL';
  12. }
  13. else
  14. {
  15. recursive_obj2array($var );
  16. }
  17. }
  18. else
  19. {
  20. $subject_array[$key] = $var;
  21. }
  22. }
  23. return $subject_array;
  24. }
  25.  
  26. echo '<pre>';
  27. print_r( recursive_obj2array( simplexml_load_file('xml.xml') ) );
  28. echo '</pre>'; 
  29. ?>
Niestety dla takiego xmlu:
  1. <actions>
  2.    <action>
  3.      <default>true</default>
  4.      <name>main</name>
  5.      <requiredRoles>viewNews</requiredRoles>
  6.      <type>view</type>
  7.      <matches>main</matches>
  8.      <fallback>accessDenied</fallback>
  9.    </action>
  10.  
  11.    <action>
  12.      <name>footer</name>
  13.      <requiredRoles>viewNews</requiredRoles>
  14.      <type>view</type>
  15.      <matches>null</matches>
  16.      <fallback>accessDenied</fallback>
  17.    </action>
  18. </actions>
wychodzi zly kod, bo z obiektem:
Cytat
Array
(
    [action] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [default] => true
                    [name] => main
                    [requiredRoles] => viewNews
                    [type] => view
                    [matches] => main
                    [fallback] => accessDenied
                )

            [1] => SimpleXMLElement Object
                (
                    [name] => footer
                    [requiredRoles] => viewNews
                    [type] => view
                    [matches] => null
                    [fallback] => accessDenied
                )

        )

)
Nie wiem jak to naprawić, bo zamiast obiektu powinna byc kolejna tablica (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Może mi ktoś pomóc?

Ten post edytował olo 13.01.2005, 18:03:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cobyl
post
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.09.2004
Skąd: warszawa a czasem okolice

Ostrzeżenie: (0%)
-----


hm, problem ten też mnie nurtował, wymyśliłem coś takiego, opartego
na wskaźnikach:

  1. <?php
  2.  
  3. function xml2array( $obj, $parent )
  4. {
  5. foreach( (array)$obj as $key => $val )
  6. {
  7. if( is_object( $val ) )
  8. {
  9. xml2array( $val , &$parent[$key] );
  10. }
  11. elseif( is_array( $val ) )
  12. {
  13. foreach ($val as $key2 => $child)
  14. {
  15. xml2array( $child , &$parent[$key][$key2]);
  16. }
  17. }
  18. else
  19. {
  20. $parent[(string)$key] = $val;
  21. }
  22. }
  23.  
  24. }
  25. $obiekty = array();
  26. xml2array($objekt_z_xlmlem,&$obiekty);
  27.  
  28. var_dump($obiekty)
  29.  
  30. ?>


jako że wymyśliłem ja to 1,5h temu więc może są jakieś błedy jakich
nie dostrzegam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) i pewnie można to "uładnić", ale chyba(?) sama idea jest git.

ps. a tak wogóle to mówie wszystkim dzień dobry bo to mój pierwszy na forum php.pl post.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 08:44