Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】DOMElement::childElementCountプロパティの使い方

childElementCountプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

childElementCountプロパティは、DOMElementオブジェクトが表すHTMLやXMLドキュメント内の要素が持つ、直下の子要素の数を整数値として保持するプロパティです。このプロパティは、現在の要素に直接含まれる子要素の数を取得するために使用されます。ここでいう「子要素」とは、XMLやHTMLのタグで囲まれた要素ノードのみを指し、テキストノード、コメントノード、処理命令などの要素ではない子ノードはカウントの対象外となります。

例えば、<div id="parent"><span>最初の要素</span>テキストノード<b>次の要素</b><!--コメント--></div>のようなHTML構造があった場合、id="parent"div要素のchildElementCountプロパティは「2」を返します。これは、<span>要素と<b>要素の二つが子要素として認識されるためです。テキストノードやコメントはカウントされません。

このプロパティを利用することで、ある要素が子要素を持っているかどうかの確認や、子要素を反復処理する際の回数を事前に把握することができます。DOMツリー内の特定の要素の状態を把握し、それに基づいた動的な処理を実装する際に大変役立ちます。DOMNode::childNodesプロパティとは異なり、要素のみを対象とするため、より具体的な子要素の操作に焦点を当てたい場合に有効です。このプロパティは読み取り専用であり、値を設定することはできません。

構文(syntax)

1<?php
2$dom = new DOMDocument();
3// HTMLコンテンツを読み込む
4// このdiv要素には、<p>と<span>の2つの要素ノードが含まれる
5// <!-- コメント --> や Text は要素ノードではないため、childElementCountではカウントされない
6$dom->loadHTML('<div><p>First paragraph</p><!-- a comment --><span>Second element</span>Text node</div>');
7
8// ドキュメントから最初のdiv要素を取得
9$divElement = $dom->getElementsByTagName('div')->item(0);
10
11// 取得したDOMElementオブジェクトのchildElementCountプロパティにアクセスし、
12// 子要素ノードの数を取得して出力する
13echo $divElement->childElementCount;
14?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

DOMElement オブジェクトの子要素の数を整数で返します。

サンプルコード

DOMElement::childElementCountで子要素数をカウントする

1<?php
2
3/**
4 * DOMElement::childElementCount プロパティの基本的な使用方法を示します。
5 * このプロパティは、要素直下の要素ノードの数を取得するために使用されます。
6 * キーワード「count」に関連して、すでに「カウントされた」子要素の数を示す例です。
7 */
8function demonstrateChildElementCount(): void
9{
10    // DOMDocument オブジェクトを作成し、HTML 文字列をロードします。
11    // '@' を使用して、不完全なHTMLなどによる警告を抑制しています。
12    $dom = new DOMDocument();
13    @$dom->loadHTML('
14        <html>
15        <body>
16            <div id="parent-element">
17                <p>子要素1</p>
18                <!-- これはコメントノードです。childElementCount には含まれません -->
19                <span>子要素2</span>
20                テキストノードも含まれません。
21                <div class="nested-div">
22                    <p>入れ子の子要素</p>
23                </div>
24            </div>
25            <p>別の親要素の子</p>
26        </body>
27        </html>
28    ');
29
30    // IDが "parent-element" の要素を取得します。
31    $parentElement = $dom->getElementById('parent-element');
32
33    // 取得した要素が DOMElement のインスタンスであることを確認します。
34    if ($parentElement instanceof DOMElement) {
35        // childElementCount プロパティにアクセスして、直下の子要素ノードの数を取得します。
36        // これは「カウントされた」結果を int 型で返します。
37        $childElementCount = $parentElement->childElementCount;
38
39        echo "ID 'parent-element' の要素直下にある子要素ノードの数: " . $childElementCount . "\n";
40        echo "コメントノードやテキストノードはカウントされず、純粋な要素ノードのみが対象です。\n";
41
42        // このカウント結果を使って条件分岐を行ったり、情報を表示したりできます。
43        if ($childElementCount > 0) {
44            echo "この親要素には子要素があります。\n";
45        } else {
46            echo "この親要素には子要素がありません。\n";
47        }
48    } else {
49        echo "ID 'parent-element' の要素が見つかりませんでした。\n";
50    }
51}
52
53// 関数を実行して、DOMElement::childElementCount の動作を確認します。
54demonstrateChildElementCount();
55

PHP 8で導入されたDOMElement::childElementCountは、DOM操作において特定のHTMLまたはXML要素が直接持つ子要素ノードの数を取得するためのプロパティです。このプロパティは引数を必要とせず、その要素直下にある純粋な要素ノードの総数をint型(整数値)で返します。ここで「要素ノード」とは、<html><p><div>などのタグで囲まれた構造を指し、コメントノード(<!-- ... -->)や単なるテキストノードはカウントの対象外となります。

サンプルコードでは、まずDOMDocumentクラスを使用してHTML文字列を読み込み、次に特定のIDを持つ親要素を取得しています。この親要素に対してchildElementCountプロパティにアクセスすることで、直下の子要素の数を簡単に確認できます。例えば、サンプル出力で「ID 'parent-element' の要素直下にある子要素ノードの数: 3」と表示されるのは、<p><span><div>の3つの要素ノードが存在するためです。

取得された整数値は、例えば「この親要素に子要素が存在するか」といった条件分岐の判断や、Webページの構造解析など、様々な場面で活用できます。キーワードのcount++が示すように、このプロパティは既に内部でカウント処理が完了した結果を直接提供するため、効率的に子要素の総数を把握することが可能です。

DOMElement::childElementCountプロパティは、要素直下の「要素ノード」の数を整数で取得します。テキストノードやコメントノードはカウントの対象外となるため、注意が必要です。このプロパティはすでにカウント済みの結果を返すため、キーワードのcount++のように自分で繰り返し処理をしながら数を加算する必要はありません。要素が取得できなかった場合にエラーとならないよう、instanceof DOMElementで確認してからプロパティにアクセスすると安全です。また、サンプルコードにある@によるエラー抑制は、警告を非表示にする手段ですが、問題の発見を遅らせる可能性があるため、本番環境での利用は慎重に行い、基本的に避けることをお勧めします。

PHP DOMElement::childElementCount で子要素数を取得する

1<?php
2
3/**
4 * DOMElement::childElementCount プロパティの使用方法を示す関数。
5 * 特定のDOM要素が持つ子要素の数を取得する方法をデモンストレーションします。
6 *
7 * 「php count とは」というキーワードに対し、DOMツリー内の子要素の数を
8 * 具体的にカウントする例として関連性の高いサンプルです。
9 */
10function demonstrateChildElementCount(): void
11{
12    // 1. 新しいDOMDocumentインスタンスを作成します。
13    $dom = new DOMDocument();
14
15    // 2. HTMLコンテンツをロードします。これはパースエラーを防ぐため抑制しています。
16    //    このHTMLには、子要素を持つ複数の要素が含まれています。
17    $htmlContent = <<<HTML
18    <div>
19        <!-- コメントノードは子要素としてカウントされません -->
20        <p>最初の段落</p>
21        テキストノードもカウントされません
22        <span>スパン要素</span>
23        <section>
24            <h3>見出し</h3>
25            <p>セクション内の段落</p>
26        </section>
27        <br>
28    </div>
29    HTML;
30    @$dom->loadHTML($htmlContent);
31
32    // 3. ルートとなるdiv要素を取得します。
33    //    getElementsByTagName は DOMNodeList を返すので、最初の要素を取得します。
34    $divElement = $dom->getElementsByTagName('div')->item(0);
35
36    // 4. div要素が正常に取得できたかを確認します。
37    if ($divElement instanceof DOMElement) {
38        // 5. DOMElement::childElementCount プロパティを使用して、
39        //    取得したdiv要素の直下の子要素の数を取得します。
40        //    テキストノードやコメントノードは含まれず、要素ノードのみがカウントされます。
41        $childElementCount = $divElement->childElementCount;
42
43        // 6. 結果を出力します。
44        echo "親要素 (div) の直下の子要素の数: " . $childElementCount . PHP_EOL;
45
46        // 補足: 上記のHTMLコンテンツでは、<p>, <span>, <section>, <br> の4つの要素が
47        //       <div>の直下の子要素としてカウントされます。
48        //       「テキストノードもカウントされません」というテキストノードや
49        //       「コメントノードは子要素としてカウントされません」というコメントノードは
50        //       childElementCount には含まれません。
51    } else {
52        echo "指定されたdiv要素が見つかりませんでした。" . PHP_EOL;
53    }
54}
55
56// 関数を実行して、DOMElement::childElementCount の動作を確認します。
57demonstrateChildElementCount();
58
59?>

PHP 8で導入されたDOMElement::childElementCountは、HTMLやXMLドキュメントをPHPで操作するDOM拡張機能のプロパティです。このプロパティは、特定のDOM要素(例えばHTMLのタグ)が直下に持つ子要素(要素ノード)の数を整数値で取得するために使用されます。引数は必要ありません。

具体的な使用例としては、まずDOMDocumentクラスを用いてHTMLコンテンツを読み込み、解析します。次に、getElementsByTagNameなどのメソッドを使って、数を調べたい対象の要素をDOMElementオブジェクトとして取得します。この取得したDOMElementオブジェクトのchildElementCountプロパティにアクセスすることで、その要素が直下に持つ子要素の総数を簡単に取得できます。

このプロパティがカウントするのは、<p><span>のような「要素ノード」のみであり、要素間のテキストやコメントノードは数に含めません。例えば、「php count とは」という文脈で、一般的な配列の要素数を数えるcount()関数とは異なり、HTMLの構造を解析して特定の要素がいくつの子要素を持つかをプログラムで把握したい場合に非常に有効です。戻り値は常に整数型(int)となり、子要素がない場合は0が返されます。

DOMElement::childElementCountは、対象のDOM要素が持つ直下の「要素ノード」の数を数えます。テキストノードやコメントノードは含まれませんので、「すべての子ノードの総数」と誤解しないよう注意が必要です。戻り値は常に整数値です。

サンプルコードでDOMDocument::loadHTML()にエラー抑制演算子@を使用していますが、これは一時的なもので、実運用ではHTMLのパースエラーの原因を特定し、適切なエラーハンドリングを実装することが推奨されます。

また、「php count」というキーワードは、PHPの汎用的なcount()関数を指すことが一般的です。本プロパティはDOMツリー内の特定の種類のノード数を取得するために特化している点を理解し、混同しないようにしましょう。このプロパティはDOMElementオブジェクトに対してのみ利用可能です。

関連コンテンツ

関連プログラミング言語