Egy szóközös tömbbelem szóközzé alakítása

Egy szóközös tömbbelem szóközzé alakítása
2013-04-09T11:03:28+02:00
2013-04-09T12:10:25+02:00
2022-11-28T18:15:39+01:00
E.D.
Egy xml fájlt alakítok át az alábbi kóddal tömbbé.
$a = json_decode(json_encode((array) simplexml_load_string($xml)),1);

A gond az, hogyha az xml-ben bármelyik nyitó és záró tag között csak egy szóköz van (pl: "<VALAMI> </VALAMI>"), akkor a tömbbe nem a szóköz kerül, hanem ez:
array(1) { [0]=> string(1) " " }
(var_dump-al nézve)

Hogy tudnám ezeket sima szóközzé alakítani? Próbáltam már array_filter-el, array_walk-al, ahol a függvényben próbáltam beazonosítani, hogy ezt tartalmazza-e az elem és ha igen, akkor felülírom sima szóközzé, de nem sikerül sehogysem...
Mutasd a teljes hozzászólást!
És ha az xml file maradna így, aztán a file feldolgozás előtt vizsgáltatnád, és ott cserélnéd és utána a cserélt elemet dolgoznád fel az nem jó?
Vagy már a bevitel esetén vizsgáltatni, hogyha szóközt vitt be, akkor cseréltetni. str_replace-val a szóközt.
Mutasd a teljes hozzászólást!

  • Ha a valami egy tömb, aminek egy eleme van és ez történetesen egy szóköz, akkor ez a valami legyen egyenlő egy szóközzel. Vagy nem értem?
    Mutasd a teljes hozzászólást!
  • <?php header("Content-Type: text/html; charset=utf-8"); $xml=" <ADATOK> <NYUL> <neve> </neve> <fialt>hónapja</fialt> <megjegyzes></megjegyzes> </NYUL> <NYUL> <neve> </neve> <fialt>hónapja</fialt> <megjegyzes></megjegyzes> </NYUL> </ADATOK> "; $a = json_decode(json_encode(simplexml_load_string($xml)),1); if (is_array($a["NYUL"][1]["neve"])){ $a= "szóköz"; print($a); } else{ print($a["NYUL"][1]["neve"]); }

    Lehet van jobb és szebb, de majdnem jó. Az $a["NYUL"][1]["neve"]) értékét valahogyan szebben kell változtatni. Pl törlöd és újra feltöltöd.
    Mutasd a teljes hozzászólást!
  • Ez így azért nem jó, mert nem visszaadni akarom az adatokat képernyőre, hanem a tömbben a problémás részeket lecserélni úgy, hogy előre nem tudom, hogy hol lesz ilyen elem.
    Mutasd a teljes hozzászólást!
  • Ilyesmivel próbálkoztam én is, de egyszerűen nem akar működni, ha ezt a vizsgálatot egy array_walk-al, array_walk_recursive-al, vagy array_filter-el meghívott függvényben akarom elvégezni. Egyszerűen nem történik semmi, mintha ekkor már nem annak látná, ami. Viszont maguk a fenti függvények működnek, mert ha pl. array_walk-al válogatás nélkül felülíratok minden tömbbelemet, akkor szépen felül is írja.
    Mutasd a teljes hozzászólást!
  • És ha az xml file maradna így, aztán a file feldolgozás előtt vizsgáltatnád, és ott cserélnéd és utána a cserélt elemet dolgoznád fel az nem jó?
    Vagy már a bevitel esetén vizsgáltatni, hogyha szóközt vitt be, akkor cseréltetni. str_replace-val a szóközt.
    Mutasd a teljes hozzászólást!
  • Nyulas példánál maradva:

    $xml="<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <!DOCTYPE ADATOK><ADATOK> <NYUL> <neve> </neve> <fialt>hónapja</fialt> <megjegyzes></megjegyzes> </NYUL> <NYUL> <neve> </neve> <fialt>hónapja</fialt> <megjegyzes></megjegyzes> </NYUL> </ADATOK>"; $a = json_decode(json_encode((array) simplexml_load_string($xml)),1); function abab(&$elem, $index) { if (is_array($elem)===true and $elem[0]==' ') { $elem = "aa"; } } array_walk_recursive($a["NYUL"], 'abab'); foreach ($a["NYUL"] as $oneA) { print($oneA["neve"]); print("<br />"); var_dump($oneA["neve"]); print("<br />"); print($oneA["fialt"]); print("<br />"); var_dump($oneA["fialt"]); print("<br />"); } print_r("<br /><br />**********<br /><br />"); print_r($a);

    ha kipróbálod ezt, illetve ugyanezt array_walk_recursive nélkül, akkor is ugyanazt az eredményt fogod kapni.
    Mutasd a teljes hozzászólást!
  • Végülis így működik...

    $xml = preg_replace('/\<(.*)\> \<\/(.*)\>/', "<$1>*****</$2>", $xml); $a = json_decode(json_encode((array) simplexml_load_string($xml)),1); function abab(&$elem, $index) { if ($elem=='*****') { $elem = " "; } } array_walk_recursive($a["NYUL"], 'abab'); print_r($a);

    De normális ez így???

    Illetve ez esetben a preg_replace mintája (pattern) szerintetek jó lesz így?
    Mutasd a teljes hozzászólást!
  • Én ajaxnál alkalmaztam olyat, hogy a speciális karaktereket (és az ékezeteket) az elküldés előtt escape-ltem, majd használat előtt visszaalakítottam. Az a megoldás miért nem jó? Nem kellene engedni, hogy " " lehessen bevinni. Azt kellene cserélni és utána visszaalakítani.

    Ezt nézd meg

    Ez is érdekes lehet
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd