Php 项目在数组中的位置

Php 项目在数组中的位置,php,Php,如果我有以下格式的id号和数组,我如何在cat==4的所有其他项目中找出什么计数(位置号)“红色”?我想要的答案是#4分之3。 排列 ( [0]=>stdClass对象 ( [id]=>1 [猫]=>1 [que]=>这里有描述。 ) [1] => stdClass Object ( [id] => 2 [cat] => 1 [que] => Description here.

如果我有以下格式的id号和数组,我如何在cat==4的所有其他项目中找出什么计数(位置号)“红色”?我想要的答案是#4分之3。 排列 ( [0]=>stdClass对象 ( [id]=>1 [猫]=>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.
        )
)
我需要拆分阵列然后循环吗?丢失

    [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.
        )
)
---------编辑----------

    [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.
        )
)
好吧,我解释得不好

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

    [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.
        )
)
$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] => 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.
        )
)
(修订为计算所有类别)

    [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=4之外,我没有完全理解匹配条件应该是什么,如果“que”包含您想要匹配的更多信息,请更改if语句

    [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.
        )
)
if($value->cat == '4' && $value->que == 'Red'){
除了cat=4之外,我没有完全理解匹配条件应该是什么,如果“que”包含您想要匹配的更多信息,请更改if语句

    [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.
        )
)
if($value->cat == '4' && $value->que == 'Red'){

我对伊恩·香农答案的编辑被拒绝了,所以我的建议是,在他的基础上使用对象表示法而不是数组表示法,并跟踪总数

    [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.
        )
)
我认为最简单的方法是使用foreach在数组中循环,如果cat==4,则递增一个计数器,直到达到所需的计数器。如下所示:

    [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.
        )
)
$pos = 0;
$total = 0;
foreach ($yourarray as $subarray) {
    if ($subarray->cat == 4) {
        $total++;
        if ($subarray->que == "Red") {
            $pos = $total;
        }
    }
}

$pos
将是您要查找的元素的位置,
$total
将是该类别中的总数。

我对Ian Shannon答案的编辑被拒绝,因此我的建议是,它基于他使用对象表示法而不是数组表示法,并跟踪总数

    [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.
        )
)
我认为最简单的方法是使用foreach在数组中循环,如果cat==4,则递增一个计数器,直到达到所需的计数器。如下所示:

    [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.
        )
)
$pos = 0;
$total = 0;
foreach ($yourarray as $subarray) {
    if ($subarray->cat == 4) {
        $total++;
        if ($subarray->que == "Red") {
            $pos = $total;
        }
    }
}


$pos
将是您要查找的元素的位置,
$total
将是该类别中的总数。

不清楚您在问什么[cat]。这是一个组的id。我正在寻找该组中的项目位置号。不清楚你在问什么。如果数组中显然有35个元素,为什么答案是4中的3?如果
cat==4
的第一个元素是31,那么3来自哪里?什么是
'Red'
?不清楚你是一个什么[猫]。这是一个组的id。我正在寻找该组中的项目位置号。不清楚你在问什么。如果数组中显然有35个元素,为什么答案是4中的3?如果第一个元素
cat==4
是31,那么3来自哪里?什么是
'Red'
?我喜欢这种方法,但是w当我尝试这段代码时,它会打断我的AJAX响应,如下所示:if($subarray[“cat”]==4){@freejosh对对象表示法的理解是正确的,出于某种原因,我认为你有一个数组。所以,我想你现在说的是你也要对所有类别进行计数。我修改了我的答案以反映这一点。如果你不是这个意思,那么我认为freejosh有正确的答案。不,我不需要计算类别。我需要每个类别的项目数以及项目在其类别中的位置。很抱歉,我似乎无法非常成功地将其传递出去…freejosh的答案就是这样做的,我的答案也是这样做的,并返回其他类别的项目数。我测试了确保,创建了一个数组,就像您的示例场景一样,当我运行它的结果是“对象是类别4中4个对象中的第3个。”我喜欢这种方法,但当我尝试代码时,它打破了我的AJAX响应,如下所示:if($subarray[“cat”]==4){@freejosh对对象表示法的理解是正确的,出于某种原因,我认为你有一个数组。所以,我想你现在说的是你也要对所有类别进行计数。我修改了我的答案以反映这一点。如果你不是这个意思,那么我认为freejosh有正确的答案。不,我不需要计算类别。我需要每个类别的项目数以及项目在其类别中的位置。很抱歉,我似乎无法非常成功地将其传递出去…freejosh的答案就是这样做的,我的答案也是这样做的,并返回其他类别的项目数。我测试了确保,创建了一个数组,就像您的示例场景一样,当我运行结果是“对象是类别4中4个对象中的第3个。”谢谢。我不确定这是否正是我所需要的。我的意思是:此数组中有许多对象。它们分为组和类别。[cat]是每个组的值。每个组中有多个项目。我希望得到的是每个组中的项目数以及特定项目在该组中的位置,例如:12个项目中有4个。@santa我仍然认为我的答案符合您所描述的。运行循环后,您应该能够说“que=红色的项目位于cat=4的
$total
对象中的
$pos
位置"@santa你是说你还想让循环生成每个类别中有多少个项目的列表,而不管
cat
的值是多少?这是一个额外的功能。最终我会有一个允许从数组中包含/排除项目的功能,所以动态地知道一个类别中有多少项目会很好。现在我硬编码t总计数,但我确实需要知道特定项目的位置,基于它在其组中的总体ID。比方说,cat==4有4个项目,我的ID=34。输出将是4个项目中的3个。谢谢。我不确定这是否正是我所需要的。我的意思是什么
    [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.
        )
)