0

xml ファイルからデータベースにデータを保存したいのですが、後で使用するために値を入れるために連想配列を作成しようとした php コードを以下に示します。ただし、純粋な値だけでなく、実際の SimpleXMLElement オブジェクトが格納されます。

ここで 2 つの質問があります。

  1. SimpleXMLElement オブジェクトの代わりに実際の値 (数値または文字列) が格納されるようにコードを変更するにはどうすればよいですか?
  2. これは、後で SQLLite を使用して保存するための値を保存する良い方法ですか (これを使用します)、またはより適切に機能する他のオプションはありますか?

php:

$theProducers = simplexml_load_file('sources/producers.xml');

$i = 0;
foreach ($theProducers->producer as $producer) {
    $producers['id'][$i] = $producer->attributes();
    $producers['name'][$i] = $producer->name;
    $producers['address'][$i] = $producer->address;
    $producers['zipcode'][$i] = $producer->zipcode;
    $producers['town'][$i] = $producer->town;
    $producers['url'][$i] = $producer->url;
    $producers['imgurl'][$i] = $producer->imgurl;

    $i += 1;
}

print_r($producers);  // outcome below

生産者.xml:

<?xml version="1.0"?>
<producers>
  <producer id="8">
    <name>Em&#xE5;mejeriet</name>
    <address>Grenv&#xE4;gen 1-3</address>
    <zipcode>577 39</zipcode>
    <town>Hultsfred</town>
    <url>http://www.emamejeriet.se</url>
    <imgurl>http://172.16.206.1/~thajo/1DV449/laboration01/producenter/images/ema.png</imgurl>
  </producer>
  <producer>
  ...

print_r($producers) からの結果:

Array (
[id] => Array (
    [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 8 ) )
    [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 57 ) )
    [2] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 45 ) )
    [3] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 33 ) )
    [4] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 16 ) )
    [5] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 41 ) )
    [6] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 38 ) )
    [7] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 40 ) )
    [8] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 56 ) ) )
[name] => Array (
    [0] => SimpleXMLElement Object ( [0] => Emåmejeriet )
    [1] => SimpleXMLElement Object ( [0] => Ölands Örtagård AB )
    [2] => SimpleXMLElement Object ( [0] => Dövestads utegrisar & Gårdsbutik )
... and so on...
4

2 に答える 2

2

出力配列の構造を変更します。

foreach ($theProducers->producer as $producer) {
    $attr = $producer->attributes();
    $producers[$i]['id'] = (int)$attr[0];
    $producers[$i]['name'] = (string)$producer->name;
    $producers[$i]['address'] = (string)$producer->address;
    $producers[$i]['zipcode'] = (string)$producer->zipcode;
    $producers[$i]['town'] = (string)$producer->towbn;
    $producers[$i]['url'] = (string)$producer->url;
    $producers[$i]['imgurl'] = (string)$producer->imgurl;

    $i += 1;
}
于 2012-12-02T18:31:02.387 に答える
1

適切なデータ型にキャストするだけです (例: 通常stringは ですが、場合によっては のような他の型がint意味を成す場合もあります):

$producers['id'][$i] = (string)$producer->attributes()['id'];
$producers['name'][$i] = (string)$producer->name;
$producers['address'][$i] = (string)$producer->address;
$producers['zipcode'][$i] = (string)$producer->zipcode;
$producers['town'][$i] = (string)$producer->town;
$producers['url'][$i] = (string)$producer->url;
$producers['imgurl'][$i] = (string)$producer->imgurl;

注:私も呼び出しに追加['id']しました->attributes()-これがあなたの意図したものであると仮定します。

于 2012-12-02T18:39:10.270 に答える