数组中的项目位置

时间:2012-11-14 20:30:38

标签: php

如果我有以下格式的身份证号码和数组,如何找出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个。

3 个答案:

答案 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'){