如果我有以下格式的身份证号码和数组,如何找出cat == 4的所有其他项目中的数量(位置编号)'红色'?我正在寻找答案#3 of 4。 排列 ( [0] => stdClass对象 ( [id] => 1 [cat] => 1 [que] =>这里描述。 )
[1] => stdClass Object
(
[id] => 2
[cat] => 1
[que] => Description here.
)
[2] => stdClass Object
(
[id] => 3
[cat] => 1
[que] => Description here.
)
....
[31] => stdClass Object
(
[id] => 32
[cat] => 4
[que] => Description here.
)
[32] => stdClass Object
(
[id] => 33
[cat] => 4
[que] => Description here.
)
[33] => stdClass Object
(
[id] => 34
[cat] => 4
[que] => Red.
)
[34] => stdClass Object
(
[id] => 35
[cat] => 4
[que] => Description here.
)
)
我是否需要拆分数组然后循环?丢失...
---------编辑----------
好的,我的工作做得不好......
我的意思是:有许多对象都有这个数组。他们被分成小组,类别。 [cat]是每组的值。每组中有多个项目。我希望得到的是每组中的一些项目以及该组中特定项目的位置,例如:12个中的4个。
答案 0 :(得分:2)
$position = 0;
$counts = array();
foreach ($yourarray as $obj) {
if (!isset($counts[$obj->cat])) $counts[$obj->cat] = 0;
$counts[$obj->cat]++;
if ($obj->cat == 4 && $obj->que == "Red") {
$position = $counts[$obj->cat];
}
}
if ($position >= 0) {
echo "Object is $position out of $counts[4] objects in category 4\n";
}
foreach($counts as $key=>$val){
echo "Category $key has $val objects.\n";
}
(修改为计算所有类别)
答案 1 :(得分:1)
我对Ian Shannon的答案的编辑被拒绝了,所以这就是我提出的建议,它建立在他的基础上,使用对象符号而不是数组符号并跟踪总数。
我认为最简单的方法是使用foreach遍历数组,如果cat == 4,则递增计数器直到达到所需的计数器。像这样:
$pos = 0;
$total = 0;
foreach ($yourarray as $subarray) {
if ($subarray->cat == 4) {
$total++;
if ($subarray->que == "Red") {
$pos = $total;
}
}
}
$pos
将是您要查找的元素的位置,$total
将是该类别中的总数。
答案 2 :(得分:0)
$found = 0;
foreach ($array as $key => $value) {
if($value->cat == '4'){
$arrayPosition = $key;
$found++;
}
}
echo 'Found ' . $found . ' cat\'s, matching the criteria';
除了cat = 4之外,没有完全理解匹配条件应该是什么,如果“que”包含您想要匹配的更多信息,请更改if语句。
if($value->cat == '4' && $value->que == 'Red'){