如何计算数组键中 value1 和 value2 出现的次数?

How to count how many times value1 appears with value2 within keys of an array?

无论我怎么搜索都找不到这个问题的答案。也许我只是问错了,但我希望这里有人能为我解答。

我知道如何计算数组中的值,但我需要计算某个值与某个其他值在数组键中出现的频率。

我已经尝试使用 'foreach' 和 'if' 语句进行迭代,但就是无法正常工作。

我正在使用的数组看起来像这样,经过简化以仅显示我感兴趣的键:

Array
(
    [0] => Array
        (
            [class] => 2
            [startissue] => 337
        )

    [1] => Array
        (
            [class] => 11
            [startissue] => 342
        )

    [2] => Array
        (
            [class] => 11
            [startissue] => 337
        )

    [3] => Array
        (
            [class] => 2
            [startissue] => 337
        )

)

我想知道 'class' 2 和 'startissue' 337 一起出现了多少次(本例中是两次),并保留 key/value 信息。结果数组会很棒,就像这样: 数组

(
    [2] => Array
        (
            [337] => 2
        )

    [11] => Array
        (
            [337] => 1
            [342] => 1
        )

)

我已经能够生成这样的数组,但无论我尝试什么,我都无法正确计算。

如有任何帮助,我们将不胜感激!

您可以使用 HashMap(或字典)将 class 的值作为键,并将其他字典作为键作为值startissue 并将此类关联的发生次数作为值。

在 Java 中看起来像 Map<Integer, Map<Integer, Integer>>,其中前两个整数类型(按顺序)关联到 classstartissue

该算法将这样描述:您遍历数组的元素,并且对于每个 class 数字,您将其映射到一个字典,该字典将包含一对 startissue 数字和 1(出现 1 次)。如果 class 已经存在,您只需查找关联的字典即可。如果 startissue 键存在,您只需增加其关联值。

编辑: Python 代码(类似于伪代码):

dictionary = {}
for value in initialArray:
    if value["class"] not in dictionary:
        dictionary[value["class"]] = {}

    if value["startissue"] not in dictionary[value["class"]]:
        dictionary[value["class"]][value["startissue"]] = 1
    else:
        dictionary[value["class"]][value["startissue"]] += 1

你会这样检查:

if classValue in dictionary and startIssue in dictionary[classValue]:
    return dictionary[classValue][startIssue]

好的,知道了。感谢@Halex 让我在正确的轨道上思考。这是我的代码,减去 'isset' 和 'in_array' 检查(以避免通知),以便更容易看到:

$class=0;
$start=0;
$combo=array();

foreach ($giftlist as $giftlists) {

    $class = $giftlists['class'];
    $start = $giftlists['startissue'];

    if ($giftlists['class']==$class && $giftlists['startissue']==$start) {
        $combo[$class][$start]=$combo[$class][$start]+1;

    } elseif (in_array($class,$giftlists)) {
        $combo[$class][$start]=1;

    } else {
        $combo[$class][$start]=0;
    }

}

echo '<pre>'; print_r($combo); echo '</pre>';

这是带有检查的 'if' 语句:

if ((in_array($class,$giftlists) && $giftlists['class']==$class) && (in_array($start,$giftlists) && $giftlists['startissue']==$start) && isset($combo[$class]) && isset($combo[$class][$start]) ) {