2012-02-28 13 views
0

私は元々XML形式のオブジェクトの配列にオブジェクトを挿入するPHPスクリプトを作成しようとしています。私は指定されたインデックスにオブジェクトを挿入し、データが更新されたオブジェクトで取得されたxmlファイルを書き換えることができるようにする必要があります。ここに私のXMLの構造は、私がbar_id = 0のIDを持つバーで働くバーテンダーを持っている場合、私はの配列にそのバーテンダーを挿入できるようにする必要があり、他の言葉でそうオブジェクトをオブジェクトの配列に挿入する

<?xml version="1.0" encoding="UTF-8"?> 
<Bars> 
    <Bar> 
     <BarName>Kam's</BarName> 
     <bar_id>0</bar_id> 
     <Bartenders> 
      <Bartender> 
       <fname>Max</fname> 
       <lname>Vest</lname> 
       <imageURL>http://uofi-bars.com/bartenderImages/maxvest.jpg</imageURL> 
       <shift>2</shift> 
      </Bartender> 
     </Bartenders> 
     <Events> 
      <Event> 
       <EventName>Kams event</EventName> 
       <date>08/10/1989</date> 
      </Event> 
     </Events> 
     <Specials> 
      <Special>Kam's Special 1</Special> 
      <Special>Kam's Special 2</Special> 
     </Specials> 
    </Bar> 

ですその特定のバーのバーテンダー。

私はXMLから配列を作成するには、以下のPHPコードを使用

function objectsIntoArray($arrObjData, $arrSkipIndices = array()) 
{ 
    $arrData = array(); 

    // if input is object, convert into array 
    if (is_object($arrObjData)) { 
     $arrObjData = get_object_vars($arrObjData); 
    } 

    if (is_array($arrObjData)) { 
     foreach ($arrObjData as $index => $value) { 
      if (is_object($value) || is_array($value)) { 
       $value = objectsIntoArray($value, $arrSkipIndices); // recursive call 
      } 
      if (in_array($index, $arrSkipIndices)) { 
       continue; 
      } 
      $arrData[$index] = $value; 
     } 
    } 
    return $arrData; 
} 
$xmlUrl = "Bars.xml"; // XML 
    $xmlStr = file_get_contents($xmlUrl); 
    $xmlObj = simplexml_load_string($xmlStr); 
    $arrXml = objectsIntoArray($xmlObj); 
    print_r($arrXml); 

私はちょうどオブジェクトの配列内のオブジェクトのこの配列を参照する方法がわからないと思います...すべてのヘルプ大変感謝しています!

ありがとうございます!

+0

XMLファイルをテーブルとして使用して、削除と更新の項目を挿入することができますか? –

+0

これは簡単な方法ですか? – thebiglebowski11

+0

xpathをPHPで試してみてください。http://www.w3schools.com/php/func_simplexml_xpath.aspそしてこちらhttp://code.huypv.net/2009/07/simplexml-xpath-php.html –

答えて

2

あなたは自分のコードを交換する場合:これで

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xmlObj = simplexml_load_string($xmlStr); 
$arrXml = objectsIntoArray($xmlObj); 
print_r($arrXml); 

:これはちょうど私はこれが役に立てば幸い:)適切な値を使用して値を置き換え、トリックを行う必要があります

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl); 
$xml = new SimpleXMLElement($xmlStr); 
$bartenders = $xml->xpath('//Bartenders'); 
$new_bartender = $bartenders[0]->addChild('Bartender'); 
$new_bartender->fname = 'test1'; 
$new_bartender->lname = 'test2'; 
$new_bartender->imgURL = 'http://test.com'; 
$new_bartender->shift = '0'; 
print_r($bartenders); 

を!

+0

ありがとう私が最初にbar_idを取得したいのであれば、対応するバーを選択してから、対応する重複のバーテンダー配列を確認してください。私が投稿したXMLを見ると、タグ – thebiglebowski11

+0

にはいくつかのバーオブジェクトがあります。私は正しいbar_idを見つけるためにクエリを実行する必要があると思います。 – thebiglebowski11

+0

xpathを使用してノードオブジェクトを取得し、特定のケースのロジックを適用するためにその値をチェックすることができます。後続の質問を正しく理解している場合は:)また、あなたの質問に「回答」としてチェックを入れることを忘れないでください –

関連する問題