データがわからないと難しいですが、おそらく次のようなものです。
// start a table
echo '<table>';
// for as long as there are elements in both span and anchors
for ($i=0; $i < $anchors->length && $i < $span->length; $i++) {
// start a new table row
echo '<tr>';
// get the current span and anchor
$a = $anchors->item($i);
$s = $span->item($i);
// print them
$text = $a->nodeValue;
$href = $a->getAttribute('href');
// col 1, number
echo '<td>'.$i.'</td>';
// col 2, anchor
echo '<td><a href ="' .$href. '">'.$text.'</a></td>';
// col 3, span
echo '<td>'.$s->nodeValue.'</td>';
// close the table row
echo '</tr>';
}
// close the table
echo '</table>';
(コードはテストされていません) 実際のデータがなければ、より具体的にすることは困難です。
これは、php に組み込まれている「現在」と「次」を使用します。
途中で役立つかもしれないいくつかのヒント/コメント/補足事項:
- 単一引用符を使用したことに注意してください。
- できるだけ少ないループ (for、while、foreach) を使用するようにしてください。これらは強力なツールですが、メモリとパフォーマンスをすぐに消費する可能性があります。
- 複数の次元 (配列内の配列) で作業している場合にのみループをネストしますが、ここではそうではありません (私が思うに)
- ネストされたブロックの数を制限してみてください (ループ内の場合は内部の場合)。私は 2 レベルよりも深くならないようにしています (これはもちろん絶対的なルールではなく、良い基準です)。できない場合は、関数を作成します。
-コードにコメントしてください!私はあなたのコードを理解するのに苦労しています (そして私は生計を立てるために毎日 PHP を書いています)。コメントは時間の無駄のように見えるかもしれませんが、デバッグが大幅に楽になり、後であなた (または他の誰か) のコードを更新する際に役立ちます!
編集:
配列ではなく DOMNodeList を使用していないことに気付いたので、コードを更新しました。正常に動作し、コードがよりクリーンになるはずです。おっしゃる通り、データを見ないと大変ですね…