2016-07-28 4 views
1

Я ищу небольшую помощь при подсчете значений в многомерном массиве.Подсчет значений значений для ключа в многомерном массиве 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.

В идеале я хотел бы только сохранить ценности, которые появились в одной или нескольких клавиш, но я могу справиться с этим после того, как я по крайней мере набрал ценности.

ответ

1

Создание массива результатов. Затем итерации внешнего массива и внутри цикла итерации дочернего массива и приращения массива результатов соответственно:

$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); 
+1

Спасибо - очень приятно! – feelsickened

0

перебрать многомерного массива, как это:

<?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,) 
Смежные вопросы