-1

各要素の文字列としてタイプを入力する配列があります。例えば:

タイプ配列

type1 | type2 | type2 | type3 | type2 | type1 | type3

$types = array('type1', 'type2', 'type2', 'type3', 'type2', 'type1', 'type3')

ここで、配列を反復処理するときに、各タイプの出現をカウントしたいと思います。

例えば:

配列の最初の要素にいるとき、返したいものは次のとおりです。

type1 : 1
type2 : 0
type3 : 0

私が欲しい4番目の要素にいるとき:

type1 : 1
type2 : 2
type3 : 1

実際、私は自分が探している要素のタイプの出現を見つけることだけに興味があります。例えば:fourth element

type3: 1

それを行うためのphp関数はありますか?または、配列全体を反復処理して、型の出現をカウントする必要がありますか?

ありがとう

4

3 に答える 3

1

あなたの質問を完全に理解したかどうかはわかりませんが、配列のすべての値をカウントしたい場合は、array_count_values関数を使用できます。

<?php
 $array = array(1, "hello", 1, "world", "hello");
 print_r(array_count_values($array));
?> 

The above example will output:
Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
于 2012-06-09T20:24:41.087 に答える
1

これを行うためのネイティブ関数はありません。しかし、簡単なものを書くことができます:

$items = array(
        'type1',
        'type2',
        'type2',
        'type3',
        'type2',
        'type1',
        'type3'
    );

    foreach ($items as $order => $item) {
        $previous = array_slice($items, 0, $order + 1, true);
        $counts = array_count_values($previous);

        echo $item . ' - ' . $counts[$item] . '<br>';
    }

このコードはこれを生成します:

type1 - 1
type2 - 1
type2 - 2
type3 - 1
type2 - 3
type1 - 2
type3 - 2
于 2012-06-09T20:29:48.377 に答える
0

正しい解決策は次のとおりです。

$index = 4;
$array = array('type1', 'type2', 'type2', 'type3', 'type2', 'type1', 'type3')
var_dump( array_count_values( array_slice( $array, 0, $index)));

を使用array_sliceして配列のセクションを取得し、それを実行するとarray_count_values、実際にはサブ配列の値をカウントできます。したがって、任意のについて、からまで$indexの値を数えることができます。0$index

これは以下を出力します:

array(3) { ["type1"]=> int(1) ["type2"]=> int(2) ["type3"]=> int(1) } 
于 2012-06-09T20:29:07.207 に答える