在多维php数组中计算每个键值的出现
问题描述:
我正在寻求一些帮助,用于计算多维数组中的值。在多维php数组中计算每个键值的出现
我有一个类似“barrack obama”的数组键,这些值将会是一长串数字。
然后下一个数组键可能是“另一个名字”,这些值也将是一长串数字。
最多约10个阵列键全部类似排列。
例的var_dump:
array(10) { ["barack obama"]=> array(4260) { [0]=> string(2) "19" [1]=> string(2) "92" [2]=> string(2) "27" [3]=> string(2) "55" [4]=> string(2) "56" [5]=> string(2) "57" [6]=> string(4) "1409" [7]=> string(4) "1384" [8]=> string(4) "1362" [9]=> string(4) "1345" [10]=> string(4) "1280" }
["united states"]=> array(5886) { [0]=> string(2) "72" [1]=> string(2) "81" [2]=> string(2) "89" [3]=> string(2) "90" [4]=> string(2) "92" [5]=> string(2) "21" [6]=> string(2) "23" [7]=> string(2) "27" [8]=> string(2) "32" [9]=> string(2) "47" [10]=> string(2) "55" }
我怎么能算的时间的唯一值(数字)在我的数组键(地名)发生量。
因此,如果55是在这两个“奥巴马”和“美国”,将比分2.
理想情况下,我想只保留中出现的一个或多个键的值,但是我可以搞定我至少得分后得分。
答
创建结果的数组。然后迭代外部数组,并在循环内迭代子数组并相应地增加结果数组:
$data = array(
"barack obama" => array(0,50,150,250,600,900,45,150,1050),
"tom jones" => array(80,120,150,75,250,80,1100,1900),
"bob mugabe" => array(50,120,10,0,250,900,600,45,1000,1010),
);
$results = array(); // create an empty array to store our results
foreach ($data as $item): // loop the outer array
foreach ($item as $key => $value): // loop the inner array
if (array_key_exists($value,$results)){ // check if value is already in results, if not set to 1, otherwise increment
$results[$value] = $results[$value] + 1;
} else {
$results[$value] = 1;
}
endforeach;
endforeach;
// show our results array
print "<pre>";
print_r($results);
答
迭代的多维数组这样过来:
<?php
$data = array(
'barack_obama' => array('19', '92', '27', '55', '57', '1409', '1384', '1362', '1345', '1280'),
'united_states' => array('72', '81', '89', '90', '92', '21', '23', '27', '32', '47', '55'),
);
$aggregator = [];
foreach (array_keys($data) as $i) {
for ($j = 0, $entryCount = count($data[$i]); $j < $entryCount; $j++) {
$index = $data[$i][$j];
$aggregator[$index] = isset($aggregator[$index]) ? $aggregator[$index] + 1 : 1;
}
}
var_export($aggregator);
其结果是:
array (19 => 1, 92 => 2, 27 => 2, 55 => 2, 57 => 1, 1409 => 1, 1384 => 1, 1362 => 1, 1345 => 1, 1280 => 1, 72 => 1, 81 => 1, 89 => 1, 90 => 1, 21 => 1, 23 => 1, 32 => 1, 47 => 1,)
谢谢 - 非常好! – feelsickened