2

「次へ」または「前へ」の段落があることを条件に、「次へ」と「前へ」の段落のボタンをページに表示したい。

これが私がこれまでに持っているものです。私は知っている段落IDから始めて、前後の段落を探します。これを別々の変数にロードします。

次に、前の段落または次の段落が存在することを確認します。次に、段落が存在する場合にのみ、リンクを表示するようにコンピューターに指示します。

現在、$nextPidのテストを除いてすべてが機能しています。$prevPidのテストは正常に機能します。最初の段落にいるときは「前の段落」のリンクは表示されませんが、ファイルの最後の段落にいるときは「新しい段落」のリンクが表示されます。

私が間違っている可能性のあるアイデアはありますか?

$xmldoc = simplexml_load_file('/tmp/lecture.xml');
$prevPid = $xmldoc->xpath("//p[@id='$refPid']/preceding::p[1]/@id"); 
$nextPid = $xmldoc->xpath("//p[@id='$refPid']/following::p[1]/@id");

if (sizeof($nextPid) > 0)
 {
  echo "<a id=\"adjParNxt_$nextPid[0]\" class='adjPara' data-refPid=\"$refPid\" data-    adjPid=\"$nextPid[0]\" data-refFs=\"$refFs\">Next Paragraph</a> ";
 } 
if (sizeof($prevPid) > 0)
 {
  echo "<a class='adjPara' data-refPid=\"$refPid\" data-adjPid=\"$prevPid[0]\" data-    refFs=\"$refFs\">Previous Paragraph</a>";
 }

私が扱っているデータはここhttp://jeffreycwitt.com/xml_data.xmlにあります。

4

1 に答える 1

3

あなたのコードは正しいことをしようとしていますが、小さな問題にぶつかっています。PHPの古いバージョン*では、一部のエッジケースでSimpleXMLElement::xpath()誤って返されていました。FALSE最近の修正されたバージョンでは、空の配列を返します。

コードを実行しているPHPのバージョンは、を返すものである必要がありますFALSE。問題はそれsizeof(FALSE)です1。つまり、あなたの条件は常に真です。

何をすべきか?

さて、私の最初のアドバイスは、 PHPをより新しいものにアップグレードすることです!

本当に古いバージョンのPHPを保持する必要がある場合は、ifステートメントを次のように変更できます。これは、アップグレードしても機能し続けます。

if (!empty(…)) 

ノート

  • 間違った動作は、バージョンPHP5.2.0-13および5.3.0-2および5.3.7-8に存在します。
  • sizeof(FALSE)が戻る理由については1、をお読みくださいcount() manual page
于 2012-08-25T18:08:41.837 に答える