如何计算对象数组中某个键的特定数量

时间:2012-12-10 19:23:48

标签: php regex arrays count

我对这个完全感到难过。我试图计算出可以计算对象数组中特定键的出现次数。

这是数组:

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

你看到cat_出现了四次,但结尾的数字不同,范围从0到3。这个数字可能会改变并且是动态的,所以我需要一种方法来弄清楚如何为“cat_”的4个键返回4的计数。有什么想法吗?还是指向我的好方向?

提前致谢。

4 个答案:

答案 0 :(得分:3)

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

你应该让'cat'成为一个带有子键的数组,这样更容易使用。

答案 1 :(得分:1)

这是一个单行选项

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

preg_grep可以扫描数组中的模式

引用:https://stackoverflow.com/a/1337711/138383

答案 2 :(得分: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] +)并将其删除然后计算相同的键(按字母顺序排序并查找键与下一个键不同例如)

如果前缀和后缀都未知,则会出现问题:)

答案 3 :(得分:0)

你可以使用for循环形式的简单逻辑。下面的代码适用于数组,如果你想使用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_。