2013-12-04 2 views
1

У меня есть массив:PHP массив ключевых слов Tally

[873] => Array 
    (
     [id] => 873 
     [email] => 
     [data] => Array 
      (
       [#1] => Dmitri Vegas & Like Mike 
       [#2] => Hardwell 
       [#3] => w&w 
       [#4] => alesso 
       [#5] => tiesto 
       [#6] => nicky romero 
       [#7] => dannic 
       [#8] => dj alvaro 
       [#9] => dvbbs 
       [#10] => sandro silva 
      ) 

    ) 

[872] => Array 
    (
     [id] => 872 
     [email] => 
     [data] => Array 
      (
       [#1] => nervo 
       [#2] => axwell 
       [#3] => armin van buuren 
       [#4] => tjr 
       [#5] => w&w 
       [#6] => deadmau5 
       [#7] => markus shulz 
       [#8] => chuckie 
       [#9] => alesso 
       [#10] => dada life 
      ) 

    ) 

[871] => Array 
    (
     [id] => 871 
     [email] => 
     [data] => Array 
      (
       [#1] => Noise controllers 
       [#2] => Noise controllers 
       [#3] => Noise crontrollers 
       [#4] => Zatox 
       [#5] => Zatox 
       [#6] => Zatox 
       [#7] => Zatox 
       [#8] => Hardwell 
       [#9] => Noisia 
       [#10] => Noisia 
      ) 

    ) 

В принципе, что я хочу сделать, это следить за слова в типе учетного формата, вроде этого

Hardwell -> 2 

w&w -> 2 

tjr -> 1 

etc etc 

I знаю, что я должен искать по массиву с in_array(), чтобы узнать, сколько раз ключевое слово подходит, но я в тупике, с чего начать.

Мне бы хотелось вывести их в список, согласно которому значение h как наивысшее число, я как бы тупой. Может ли кто-нибудь начать меня с того, как я это сделаю?

+0

Это может заставить вас начать: HTTP: // StackOverflow .com/questions/7960307/check-how-many-times-specific-value-in-array-php – Peon

+0

Мне сложно понять, как использовать эту функцию, может ли кто-нибудь дать мне небольшой пример? – user2820604

+0

ваш аргумент не должен быть '$ data', а' $ array' в 'foreach' для его работы. –

ответ

4

Это может быть достигнуто с помощью array_count_values():

$keywords = array(); 

foreach ($data as $key => $sub) { 
    foreach ($sub['data'] as $key => $value) { 
     $keywords[] = $value; 
    } 
} 

$result = array_count_values($keywords); 
print_r($result); 

$result будет массив, содержащий все значения и количество вхождений. Если вы хотите, чтобы также отобразить количество вхождений, вы можете просто цикл по $result массива:

foreach ($result as $value => $number) { 
    echo "$value was found $number times".PHP_EOL; 
} 

Demo.

+0

он также хочет, чтобы он отсортировал 'arsort' должен сделать трюк – cmorrissey

+0

Ваш массив выглядит по-другому, чем мой, как мне изменить свой массив, чтобы он выглядел так по умолчанию? – user2820604

+0

Откуда у вас был массив? Как вы его создаете? Можете ли вы 'print_r' это? –

0
$array = array(
    array('data' => array('asd','abc')), 
    array('data' => array('abc','cde')), 
    array('data' => array('cde','dfe')) 
); 

$data_array = array(); 

foreach ($array as $arr) { 
    if (is_array($arr['data'])) 
    $data_array = array_merge($data_array, $arr['data']); 
    else 
    array_push($data_array, $arr['data']); 
} 

$new_arr = array_count_values($data_array); 
arsort($new_arr); 

print_r($new_arr); 

https://eval.in/76116

Смежные вопросы