2016-08-04 4 views
1

の原因となります。これは私が試したコードです:は奇妙な行動

//$data is SimpleXML object from $datas. 
//$datas is SimpleXML object contains "Module" elements: 

$menu[] = $data; 

いいえ運:まだエラーが発生します。私はforeachを使って$データを取得します。だから。私はforeach((array) $datas->Module as $data)を試しました。運もありません。


$menu = array_map(function($data) { 
    return data; 
}, $datas->Module); 

多分この非常識なソリューションが、私はあまりにも(array)、そして運を追加しました。


$i=0; $menu = []; 
foreach($datas as $data){ 
    $menu[$i] = $data; 
    $i++; 
} 

array_push($menu, $data); 

すべてが無駄にT^Tです。それを正しく行う方法、配列にSimpleXMLオブジェクトを追加する(押し込む)?

EDIT

XML文字列:

<Module name="Administrative Task" url="Admin" icon="glyphicon glyphicon-list-alt" rule_name="url_administrative" rule_min="R"> 
    <Submodule name="User Management" url="User"> 
    <Proccess name="Add New" url="New"/> 
    </Submodule> 
</Module> 

<Module name="Lisencing Systems" url="Lisensi" icon="glyphicon glyphicon-book" rule_name="url_licensing" rule_min="RWUD"> 
    <Submodule name="User Management" url="User"> 
    <Proccess name="Add New" url="New"/> 
    </Submodule> 
</Module> 
+0

あなたの 'array_map'行では、' $ datas-> Module'を渡しています。これは配列ではなく、SimpleXMLElementオブジェクトです。 '$ menu [] = $ data'行は、' foreach'のようにうまくいくはずです:https://3v4l.org/0HIKE – IMSoP

+0

私はあなたが与えたエラーを実際に再現することはできません。 [mcve]を含めるように質問を編集して、エラーがどこから来ているのか理解できるようにしてください。 – IMSoP

+0

質問を更新しました。私はPHP 5.6.1を使用していますが、これは私のPHPエンジンに関連していますか? – Kekesed

答えて

-1

は、なぜあなたは、あなたのXML文字列は以下のように変更されません。

<?php error_reporting(E_ALL); 
$xml = '<?xml version="1.0" encoding="UTF-8"?> 
<row> 
    <Module> 
    <name>Administrative Task</name> 
    <url>Admin</url> 
    <icon>glyphicon glyphicon-list-alt</icon> 
    <rule_name>url_administrative</rule_name> 
    <rule_min>R</rule_min> 
     <Submodule> 
      <name>User Management</name> 
      <url>User</url> 
      <Proccessname>Add New</Proccessname> 
      <url>New</url> 
     </Submodule> 
</Module> 
<Module> 
    <name>Lisencing Systems</name> 
    <url>Lisensi</url> 
    <icon>glyphicon glyphicon-book</icon> 
    <rule_name>url_licensing</rule_name> 
    <rule_min>RWUD</rule_min> 
     <Submodule> 
      <name>User Management</name> 
      <url>User</url> 
      <Proccessname>Add New</Proccessname> 
      <url>New</url> 
    </Submodule> 
    </Module> 
</row>'; 

$simple = simplexml_load_string($xml); 
// var_dump($simple); 

$arr = json_decode(json_encode($simple) , 1); 
echo '<pre>'; 
print_r($arr); 
echo '</pre>'; 
+0

入力の構造を変更することは非常にまれですが、この場合になぜ必要なのかわかりません。さらに、 'json_decode(json_encode()) 'トリックは、解決するよりはるかに多くの問題を引き起こすと強く信じています。 – IMSoP

+0

XML文字列を使用しようとしました**彼の質問には** Kekesed **が提供しました。しかし、 'simplexml_load_string()'は、同じXML文字列を使用すると結果が得られません。それが私が構造を変えた理由です。しかし、私は 'json_decode(json_encode())'がそのような場合にどのように動作するのか分かりません。 – sriram

+0

確かに、「私はあなたの家に入ることを試みたが、正面玄関を見つけることができなかったので、私は自分の家に行く」と言っています。ほとんどの場合、人々は他人のデータを解析しようとしているため、「別の入力を使用する」とは言いません。 – IMSoP