0

如果我有以下格式的 ID 号和数组,我如何找出 cat == 4 的所有其他项目中的计数(位置号)“红色”?我正在寻找的答案 #3 of 4. Array ( [0] => stdClass Object ( [id] => 1 [cat] => 1 [que] => Description here.)

    [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 个。

4

3 回答 3

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";
}

(修改为计算所有类别)

于 2012-11-14T20:38:36.343 回答
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将是该类别中的总数。

于 2012-11-15T03:40:10.913 回答
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'){
于 2012-11-14T23:06:49.677 回答