1

私はこれに完全に困惑しています。オブジェクト配列内の特定のキーの出現回数をカウントできる回数を把握しようとしています。

配列は次のとおりです。

Array 
(
[0] => stdClass Object
    (
        [id] => 1
        [user_id] => 1
        [group_id] => 1
        [cat_0] => foo
        [cat_1] => bar
        [cat_2] => 
        [cat_3] => 
    )
)

cat_が4回表示されますが、末尾に0〜3の範囲の番号が付いていることがわかります。この数は変化して動的になる可能性があるため、「cat_」の4つのキーに対して4の数を返す方法を理解する方法が必要です。何かご意見は?または私を指すための良い方向ですか?

前もって感謝します。

4

4 に答える 4

3
$count = 0;
foreach ($myObj as $key => $value) {
    if (strpos($key, 'cat_') === 0) {
        $count++;
    }
}

'cat'サブキーを使用して配列を作成する必要があります。これにより、操作がはるかに簡単になります。

于 2012-12-10T19:27:19.087 に答える
1

これがワンライナーオプションです

$catCount = count(preg_grep("/^cat_(\d)+$/", array_keys(get_object_vars($yourObj))));

preg_grepパターンの配列をスキャンできます

参照:https ://stackoverflow.com/a/1337711/138383

于 2012-12-10T19:34:40.727 に答える
0

単純な場合の擬似コード:

for all keys:
1. Get the key
2. Apply regex to check if the key matches your prefix
3. if yes ++1 your result

プレフィックスが不明な重複を見つける必要がある場合は、次のようにすることができます。

[random-prefix1_1] => v1
[random-prefix1_2] => v2
[random-prefix1_3] => v3
[random-prefix2_1] => v4
[random-prefix2_2] => v5

次に、これを逆に行うことができます。つまり、キーの接尾辞(_ [0-9] +)を検索して削除し、同じキーを数えます(たとえば、アルファベット順に並べて、キーが次のキーと異なる場合を見つけます)。

プレフィックスとポストフィックスの両方が不明な場合は、問題があります:)

于 2012-12-10T19:36:48.777 に答える
0

forループ形式の単純なロジックを使用できます。以下のコードは配列に対して機能し、uがobjを使用する場合は->

    $j =1 ;
    for ($i=0;$i<$j;$i++){ //note here we consider that cat_0 is always there and if not then check isset out of for loop cat_0 exist then only go inside loop
          echo 'O/P : '.$val['cat_'$i];
          if (isset($val['cat_'.(int)($i+1)])){
               $j++;
          }
    }

そして最後に$jには最後の値(合計)が含まれます。これは、cat_のn個に対して機能します。

于 2016-04-05T07:33:07.667 に答える