0

ノード値を配列に保存しようとしています。これは XML 構造です。

  <wildcards>
    <conference id="1">
      <seeds>
        <seed divId="1">10,7,17</seed>
        <seed divId="2">8,5,3</seed>
      </seeds>
      <wild>2,4</wild>
      <elimination>11,6,14,1,13,12,20,15</elimination>
    </conference>
 </wildcards>

xml ファイルはここ
にあります。会議 1 のノード値を、ワイルドカード順位での位置を示す配列キーに関連付けたいと考えています。これが私のコードです:

$xmlDoc = new DOMDocument(); 
$xmlDoc->load('http://www.tsn.ca/datafiles/XML/NHL/standings.xml'); 

$searchNode = $xmlDoc->getElementsByTagName('wildcards');
foreach ($searchNode as $node) {
    $conference1 = $node->getElementsByTagName('conference');
    $conference1 = $conference1->item(0)->nodeValue;
}           

echo $conference1;
//  $conference1 = str_replace(" ",",",$conference1);
$conference1Array =  explode(',', $conference1);
$conference1ArrayLength = count($conference1Array) ;

for ($i = 1; $i < $conference1ArrayLength; $i++) {
    echo $i.": ".$conference1Array[$i-1];
    echo "<br/>";
}  

このウェブサイトにアクセスすると、現在の出力が表示されます。配列を正しくするために、空白文字列を置き換えて「、」で爆発させようとしましたが、うまくいきませんでした。

conference1 の出力は次のとおり10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15です。空白があっても、置換は機能しませんでした。

17、3、4 の後にカンマが必要です。アイデアは、チーム ID のキーをデータベースの という名前の列に挿入することseedです。次に、PHP を使用して、テーブル出力の各部門/ワイルドカードに関連付けられている数字を特定できます。キーとチーム ID/ノード値の関連付けの意味は次のとおりです。

チーム ID: 10 -> 1 (ディビジョン 1 で 1 位)
チーム ID: 7 -> 2 (ディビジョン 1 で 2 番目)
チーム ID: 17 - > 3 (ディビジョン 1 で 3 位)
チーム ID: 8 -> 4 (ディビジョン 2 で 1 位)
チーム ID: 5 -> 5 (ディビジョン 2 で 2 位)
チーム ID: 3 -> 6 (ディビジョン 3 で 3 位)
チーム ID: 2 -> 7 (ワイルドカード 1)
チーム ID: 4 -> 8 (ワイルドカード 2)
チーム ID: 残りすべて (除外)

このリンクのコードを使用してノード値を個別に取得しようとしましたが、自分の状況で動作させる方法がわかりませんでした。ところで、私はそれを試みたコードをもう持っていません。

編集:提供されたリンクを見て、これを思いつきました:

$searchNode = $xmlDoc->getElementsByTagName('wildcards');
$divData = array();
foreach($searchNode as $node){
    foreach($node->childNodes as $child) {
        foreach($child->childNodes as $secondChild) {
            foreach($secondChild->childNodes as $thirdChild) {
                $divData[] = array($thirdChild->nodeName => $thirdChild->nodeValue);
            }
        }
    }
}

これは私の新しい出力です

4

1 に答える 1

1

conference1 の出力は、10,7,17​​ 8,5,3 2,4 11,6,14,1,13,12,20,15 です。空白があっても、置換は機能しませんでした。

次のコードを使用してコンマを挿入します。

$conference1 = '10,7,17 8,5,3 2,4 11,6,14,1,13,12,20,15 ';
$conference1 = str_replace(" ",",",trim($conference1));

更新 1

これを試して、コンマまたは[0-9]

$new_string = preg_replace('/[^0-9,]+/u', ",", $your_string);

更新 2

先頭と末尾の余分なコンマを修正するには、もう一度トリミングを行います$new_string = trim($your_string,",");

于 2016-08-16T05:51:45.460 に答える