1

多次元配列から特定の値の数をカウントするにはどうすればよいですか? 例えば:

array(
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '2')
    array ('stack' => '2')
)

この例では、結果は次のようになります。

スタック == 1 => 4 マッチ
スタック == 2 => 2 マッチ

4

5 に答える 5

1

自分でループする必要があります。

$counts = array();
foreach( $array as $value) {
    foreach( $value as $k => $v) {
        if( !isset( $counts[$k])) $counts[$k] = array();
        if( !isset( $counts[$k][$v])) $counts[$k][$v] = 0;
        $counts[$k][$v] += 1;
    }
}

foreach( $counts as $k => $v1)
    foreach( $v1 as $v => $count)
        echo "$k == $v => $count matches\n";

これは印刷されます

stack == 1 => 4 matches
stack == 2 => 2 matches
于 2012-07-17T16:52:15.680 に答える
1
$occur = array();

foreach ($array as $item) {
    foreach ($item as $k => $v) {
        $occur["$k == $v"]++;
    }
}
于 2012-07-17T16:54:08.057 に答える
1

Rayが言うように、データ構造を考えると、唯一のオプションは、配列全体をトラバースして、進むにつれてカウントアップすることです。

パフォーマンスが心配な場合は、別のデータ構造(おそらく配列と一緒に)の使用を検討することをお勧めします。2番目のデータ構造は、配列値をキーとして受け取り、配列の構築中に構築できる継続的なカウントを含むハッシュのようなものになります。

そうすれば、何度も繰り返す必要がなく、パフォーマンスへの影響を最小限に抑えることができます。

于 2012-07-17T16:54:43.607 に答える
1

いくつかの変更が必要でしたが、これは役に立ちます

<?php


    function array_count_values_of($value, $array) {
        $counts = array_count_values($array);
        return $counts[$value];
    }

    $array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);
    $array2 = array_unique($array);
    for($i=0 ; $i<count($array2) ; $i++)
    {
        $temp = array_count_values_of($array2[$i], $array);
        $result[$i][0] = $array2[$i];
        $result[$i][1] = $temp;
    }

    print_r($result);

    ?>
于 2012-07-17T17:01:23.103 に答える
0

単純にループして、結果を新しい結果配列にプッシュするだけです (ただし、コーディングはしません)。

コールバック関数で array_walk/array_filter を使用して処理するなど、より複雑なことを行うことができます...しかし、それは効率が悪いかもしれません。

この投稿を参照してください: PHP 多次元配列の数

于 2012-07-17T16:50:53.233 に答える