如何计算数组键中 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>>
,其中前两个整数类型(按顺序)关联到 class和 startissue。
该算法将这样描述:您遍历数组的元素,并且对于每个 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]) ) {
无论我怎么搜索都找不到这个问题的答案。也许我只是问错了,但我希望这里有人能为我解答。
我知道如何计算数组中的值,但我需要计算某个值与某个其他值在数组键中出现的频率。
我已经尝试使用 '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>>
,其中前两个整数类型(按顺序)关联到 class和 startissue。
该算法将这样描述:您遍历数组的元素,并且对于每个 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]) ) {