2

Count() の戻り値の下

var の要素数を返します。var が配列または実装された Countable インターフェイスを持つオブジェクトでない場合、1 が返されます。例外が 1 つあります。var が NULL の場合、0 が返されます。

文字と数字で満たされた文字列があり、 preg_match_all() を使用してそれらの数字を抽出しています。思い出すと、preg_match_all は、3 番目のパラメーターで指定された配列の内容に結果を入力します。なぜ1を返すのですか?

コードで何が間違っていますか?

$string = "9hsfgh563452";
preg_match_all("/[0-9]/",$string,$matches);

echo "Array size: " . count($matches)."</br>"; //Returns 1
echo "Array size: " . sizeof($matches)."</br>"; //Returns 1
print_r($matches);

配列の内容 (文字列で返されるすべての数値) を合計したいのですが、array_sum() が機能しませんでした。これは文字列配列であり、「、」などの区切り文字を使用していないため、int 配列に変換する方法がわかりません。これを行うためのより効率的な方法はありますか?

助けていただければ幸いです。

4

4 に答える 4

4

$matchesは内部に別の配列を含む配列であるため、カウントは 1 です。具体的に$matches[0]は、0 番目のキャプチャ グループ (正規表現全体) の各一致を含む配列です。

つまり、$matches次のようになります。

Array
(
    [0] => Array  // The key "0" means that matches for the whole regex follow
        (
            [0] => 9   // and here are all the single-character matches
            [1] => 5
            [2] => 6
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 2
        )

)
于 2013-04-12T22:29:58.550 に答える
3

の結果は、preg_match_all実際には配列の配列です。

Array
(
    [0] => Array
        (
            [0] => 9
            [1] => 5
            [2] => 6
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 2
        )
)

したがって、次のようなことを行う必要があります。

echo "Array size: " . count($matches[0]);

echo "Array sum: " . array_sum($matches[0]);
于 2013-04-12T22:30:07.420 に答える
0

これは、preg_match_all が結果を返す方法によるものです。その主な配列要素は preg ブラケット (式の一致) であり、それらの内容は一致したものです。

あなたの場合、部分式はありません。したがって、配列には要素が 1 つしかなく、その要素にはすべての数字が含まれます。

それらを要約するには、次のようにします。

$sum = 0;
$j = count($matches[0]);
for ($i = 0; i < $j; ++$i) {
  $sum += (int)$matches[0][$i];
}
于 2013-04-12T22:31:33.287 に答える
0

$matches の代わりに $matches[0] を使用してみてください (7 を返します)。

次に、すべての数値を合計したい場合は、 foreach 関数を使用できます

于 2013-04-12T22:32:10.727 に答える