PHP对象数组中的计数值

PHP对象数组中的计数值,php,arrays,object,Php,Arrays,Object,这可能是一个基本问题,但我正在努力寻找一种方法来计算值,而不必执行多个foreach循环。我有这个对象数组(包括部分列表): 列表中的对象数量各不相同,但每个对象都有键=>值,如图所示。我想返回的是一个数组,其中包含“hole”的每个值的计数。大概是这样的: `array(18) { [1]=> 4 [2]=> 5 [3]=> 6` 以此类推,其中键是“hole”的每个值,新数组值是计数 我尝试了count、count(get\u object\u vars($)

这可能是一个基本问题,但我正在努力寻找一种方法来计算值,而不必执行多个
foreach
循环。我有这个对象数组(包括部分列表):

列表中的对象数量各不相同,但每个对象都有
键=>值
,如图所示。我想返回的是一个数组,其中包含“hole”的每个值的计数。大概是这样的:

`array(18) {
  [1]=> 4
  [2]=> 5
  [3]=> 6`
以此类推,其中键是“hole”的每个值,新数组值是计数


我尝试了
count
count(get\u object\u vars($)
)等形式,但我找到的所有示例都是对对象进行计数。提前感谢。

听起来您希望返回一个包含18(?)个元素的数组,其中包含每个孔的出现次数计数

$new_array = array_reduce($your_array, function ($carry, $item) {
  if (property_exists($item, "hole") && array_key_exists($item->hole - 1, $carry)) {
    $carry[$item->hole - 1]++;
  }
  return $carry;
}, array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));

听起来您希望返回一个包含18(?)个元素的数组,其中包含每个孔的出现次数

$new_array = array_reduce($your_array, function ($carry, $item) {
  if (property_exists($item, "hole") && array_key_exists($item->hole - 1, $carry)) {
    $carry[$item->hole - 1]++;
  }
  return $carry;
}, array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));

你的问题有点让人困惑,但这应该对你有帮助:

$holes = [];
foreach ($array as $object) {
    if (isset($object->hole)) {
        $hole = $object->hole;
        if (!isset($holes[$hole])) {
            $holes[$hole] = 0;
        }
        $holes[$hole]++;
    }
}
我使用以下方法对其进行了测试:

$object1 = (object)['hole'=>'2'];
$object2 = (object)['hole'=>'3'];
$object3 = (object)['hole'=>'1'];
$object4 = (object)['hole'=>'3'];

$array = [$object1,$object2,$object3,$object4];

$holes = [];
foreach ($array as $object) {
    if (isset($object->hole)) {
        $hole = $object->hole;
        if (!isset($holes[$hole])) {
            $holes[$hole] = 0;
        }
        $holes[$hole]++;
    }
}

echo "<pre>";
print_r($holes);

你的问题有点让人困惑,但这应该对你有帮助:

$holes = [];
foreach ($array as $object) {
    if (isset($object->hole)) {
        $hole = $object->hole;
        if (!isset($holes[$hole])) {
            $holes[$hole] = 0;
        }
        $holes[$hole]++;
    }
}
我使用以下方法对其进行了测试:

$object1 = (object)['hole'=>'2'];
$object2 = (object)['hole'=>'3'];
$object3 = (object)['hole'=>'1'];
$object4 = (object)['hole'=>'3'];

$array = [$object1,$object2,$object3,$object4];

$holes = [];
foreach ($array as $object) {
    if (isset($object->hole)) {
        $hole = $object->hole;
        if (!isset($holes[$hole])) {
            $holes[$hole] = 0;
        }
        $holes[$hole]++;
    }
}

echo "<pre>";
print_r($holes);


array\u key\u exists()
然后计算值。你的意思是你试图计算每个对象中的所有元素?为什么不使用
foreach
?有什么问题吗anyway@aldrin,谢谢你的提示。但我知道key=“hole”将存在于每个对象中,但我如何找到值并计算每个值出现的次数?@Ghost。对不起,我不清楚。不,我正在尝试计算“hole”=>1、2、3、4…18的值在数组中出现的次数,而不进行18次循环。我认为问题不清楚。你能简单地说出你想要什么吗?
array\u key\u exists()
然后计算值。你的意思是你试图计算每个对象中的所有元素?为什么不使用
foreach
?有什么问题吗anyway@aldrin,谢谢你的提示。但我知道key=“hole”将存在于每个对象中,但我如何找到值并计算每个值出现的次数?@Ghost。对不起,我不清楚。不,我正在尝试计算“hole”=>1、2、3、4…18的值在数组中出现的次数,而不进行18次循环。我认为问题不清楚。你能简单地说你想要什么吗?天才…还是我应该说一个洞中的一个。。。谢谢就像一个符咒。也许$holes[$hole]++在其他地方或返回?如果没有设置,那么设置为0,不要做任何更乐意帮助的事情。内外掌握对象和数组操作将使您获得位置@DavidWyly如果您有简单的对象,但不喜欢对象,您可以使用(对象)Genius重新键入数组by(array)$object并使用as array,反之亦然…或者我应该说是一个洞中的洞。。。谢谢就像一个符咒。也许$holes[$hole]++在其他地方或返回?如果没有设置,那么设置为0,不要做任何更乐意帮助的事情。内外掌握对象和数组操作将使您获得位置@DavidWyly如果您有简单的对象,并且不喜欢对象,您可以通过(array)$object重新键入array,然后使用(object)在array上使用as-array,反之亦然。我尝试了这个方法,但在
array\u key\u exists上不断出现错误
查找数组名称作为第二项。尝试了你的建议的不同版本,但没有成功。不过,谢谢你的帮助。哎呀,我把数组的参数倒过来了。键是存在的,它们与属性是相反的,我相信这是一个很好的理由。修好了,谢谢杰姆。我会试试看。我试过了,但是在
数组\u key\u exists
查找数组名作为第二项时,一直出现错误。尝试了你的建议的不同版本,但没有成功。不过,谢谢你的帮助。哎呀,我把数组的参数倒过来了。键是存在的,它们与属性是相反的,我相信这是一个很好的理由。修好了,谢谢杰姆。我试试看。