我对这个完全感到难过。我试图计算出可以计算对象数组中特定键的出现次数。
这是数组:
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的计数。有什么想法吗?还是指向我的好方向?
提前致谢。
答案 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
可以扫描数组中的模式
答案 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_。