PHP 统计多维复杂数组中的值

2025-07-31 295955 日常编程

本文将介绍如何使用 PHP 统计多维复杂数组中特定条件下值的数量。我们将以统计 questions_row_id 为例,根据 evaluator_row_id 和 settings_row_id 的组合进行计数。

首先,我们来看一下给定的数组结构:

$myarray = [
  0 => [
    0 => [
      "questions_row_id" => 1,
      "settings_row_id" => 1,
      "evaluator_row_id" => [
        0 => "1",
        1 => "4",
        2 => "101"
      ]
    ]
  ],
  1 => [
    0 => [
      "questions_row_id" => 2,
      "settings_row_id" => 1,
      "evaluator_row_id" => [
        0 => "1",
        1 => "100"
      ]
    ]
  ],
  2 => [
    0 => [
      "questions_row_id" => 4,
      "settings_row_id" => 3,
      "evaluator_row_id" => [
        0 => "1",
        1 => "101"
      ]
    ]
  ]
];

我们的目标是,对于特定的 evaluator_row_id 和 settings_row_id 组合,统计 questions_row_id 的数量。例如,对于 (Evaluator id == 1 and settings id == 1),问题数量应为 2;对于 (Evaluator id == 1 and settings id == 3),问题数量应为 1。

以下是一种实现该目标的方法:

  1. 构建中间数组: 首先,我们需要遍历原始数组,提取所需的信息,并构建一个新的数组,方便后续的统计。
$evaluators = [];

// 开始遍历
foreach ($myarray as $i1 => $set1) {
  foreach ($set1 as $i2 => $set2) {
    // 遍历每个 evaluator_id
    foreach ($set2['evaluator_row_id'] as $evaluator_id) {
      // 构建新的数组,以 evaluator_id 和 settings_id 为键
      $settings_id = $set2['settings_row_id'];
      $evaluators[$evaluator_id][$settings_id][] = $set2['questions_row_id'];
    }
  }
}

这段代码的核心在于,它将原始数组的信息重组到 $evaluators 数组中。$evaluators 数组的结构是:$evaluators[$evaluator_id][$settings_id],其值为一个包含所有对应 questions_row_id 的数组。

  1. 统计问题数量: 接下来,我们遍历 $evaluators 数组,统计每个 evaluator_id 和 settings_id 组合下的问题数量。
$question_counts = [];
foreach ($evaluators as $evaluator_id => $settings_list) {
  foreach ($settings_list as $setting_id => $question_ids) {
    $question_counts[$evaluator_id][$setting_id] = count($question_ids);
  }
}

print_r($question_counts);

这段代码遍历 $evaluators 数组,并使用 count() 函数统计每个 $question_ids 数组的元素个数,即问题数量。最终,结果保存在 $question_counts 数组中。

最终的输出结果如下:

Array
(
    [1] => Array
        (
            [1] => 2
            [3] => 1
        )

    [4] => Array
        (
            [1] => 1
        )

    [101] => Array
        (
            [1] => 1
            [3] => 1
        )

    [100] => Array
        (
            [1] => 1
        )

)

注意事项:

  • 确保原始数组的结构与代码中的假设一致。如果结构不同,可能需要修改代码以适应新的结构。
  • 在处理大型数组时,需要注意内存使用情况。如果数组非常大,可以考虑使用迭代器或分块处理来减少内存占用。
  • 在实际应用中,可以根据需要修改代码,例如,将 evaluator_id 和 settings_id 作为参数传递给函数,以便更灵活地进行统计。

总结:

本文提供了一种使用 PHP 统计多维复杂数组中特定条件下值的数量的方法。通过构建中间数组和遍历统计,可以高效地实现目标。在实际应用中,可以根据需要修改代码,以适应不同的数组结构和统计需求。这种方法可以应用于各种需要统计多维数组中特定信息的场景,例如,统计用户行为数据、分析产品销售数据等。

以上就是PHP 统计多维复杂数组中的值的详细内容,更多请关注就爱读【www.jiuaidu.com】。

如何使用Python collections.Counter快速统计超大文本中的词频?

直接用Counter读完整文件会内存爆炸,因为open(file).read().split()先将整个文件加载进内存再切词;应逐行或分块读取并用update()增量更新,避免一次性加载和重建字典。 为什么直接用Counter读完整文件会内存爆炸? 因为Counter本身不负责分块或流式处理——你传给它的必须是可迭代对象,如果用open(file).read().split(),Python会先把...

Pandas 中按列分组统计满足条件的唯一值数量并筛选结果

本文介绍如何在Pandas中基于多条件过滤(如colC>0且colB属于指定集合),按colA分组统计colB的唯一值个数,并仅保留计数大于2的分组,最终导出对应原始数据子集。 本文介绍如何在pandas中基于多条件过滤(如`colc>0`且`colb`属于指定集合),按`cola`分组统计`colb`的唯一值个数,并仅保留计数大于2的分组,最终导出对应原始数据子集。 在数据分析中,常...

高效提取目标数组中满足多组上下界条件的索引列表

本文介绍如何在Python中高效获取多个上下界区间内目标数组元素的原始索引,重点对比朴素布尔掩码、NumPy向量化搜索与排序+二分查找三种方法,推荐使用np.searchsorted实现毫秒级批量区间定位。 本文介绍如何在python中高效获取多个上下界区间内目标数组元素的原始索引,重点对比朴素布尔掩码、numpy向量化搜索与排序+二分查找三种方法,推荐使用`np.searchsorted`实现毫...

高效提取目标数组中满足多组上下界条件的索引列表(基于排序+二分搜索)

本文介绍如何在Python中高效提取目标数组中落在多组动态上下界范围内的元素索引,重点对比原始逐条件布尔掩码法与基于排序+二分搜索(bisect/np.searchsorted)的优化方案,实测numpy版本性能提升达45倍。 本文介绍如何在Python中高效提取目标数组中落在多组动态上下界范围内的元素索引,重点对比原始逐条件布尔掩码法与基于排序+二分搜索(`bisect`/`np.searchs...

如何在Python中高效查找数组中的众数_使用Boyer-Moore投票算法

Boyer-Moore投票算法适合找众数,因其仅需O(1)空间和O(n)时间,且不预设众数存在,核心是候选抵消逻辑;但必须二次遍历验证候选是否真满足出现次数>n/2,否则结果不可靠。 为什么Boyer-Moore投票算法适合找众数 它只用O(1)空间、O(n)时间,且不要求提前知道众数是否存在——特别适合处理超大数组或流式数据。但注意:该算法**只保证在众数存在时返回它**;如果不存在众数,结果不...

Python中如何提取NumPy数组中满足条件的元素索引_使用where函数筛选

np.where返回索引元组而非一维数组,二维数组返回(row_indices,col_indices);需用[0]取行索引、zip(*np.where())得坐标对、flatnonzero得线性索引;注意条件优先级、视图赋值及性能差异。 np.where返回的是索引元组,不是一维索引数组 直接对二维数组调用np.where(condition)会返回一个长度为ndim的元组,比如二维数组返回(r...

Pandas describe() 输出转为单行宽格式:列名=统计量-字段名

将df.describe()的多行统计结果(如mean、std、min、max)重塑为单行DataFrame,列名为"列名-统计量"(如Height-mean),便于批量处理千个文件并汇总到CSV中进行横向分析。 将`df.describe()`的多行统计结果(如mean、std、min、max)重塑为单行dataframe,列名为`"列名-统计量"`(如`height-mean`),便于批量处理...

怎么在Python中快速统计列中各元素的出现频率_使用value_counts方法

value_counts()默认不统计NaN是设计行为,因dropna=True为默认参数;需显式设置dropna=False才包含NaN计数,且仅对Series有效。 value_counts()为什么默认不统计NaN? value_counts()默认会自动丢弃NaN,这不是bug,是设计行为。如果你发现结果里没看到空值频次,别急着怀疑数据——先确认是否用了dropna=False参数。 想包...