2014-11-04 38 views
0

电影的数量需要写一个PHP脚本,将循环在阵列上,并显示目前我如何遍历数组和计数,一个演员一直在

阵列按字母顺序排列的演员和

$movies = array (
"horror"=>array (
    "Paranormal Activity"=> array (
     "Katie Featherston", 
     "Kathryn Newton" 
), 
    "The Ring"=> array (
     "Naomi Watts", 
     "Brian Cox" 
), 
    "Sleepy Hollow"=> array(
     "Johnny Depp", 
     "Christina Ricci" 
    ) 
), 
"action" => array (
    "The Tourist"=> array (
     "Johnny Depp", 
     "Angelina Jolie" 
    ), 
    "Public Enemies"=> array (
     "Johnny Depp", 
     "Christian Bale" 
    ), 
    "The Dark Knight Rises"=> array (
     "Christian Bale", 
     "Tom Hardy" 
    ), 
    "Salt"=> array (
     "Angelina Jolie" 
    ) 
), 
"thriller"=> array (
    "Inception"=> array(
     "Leornardio Dicaprio", 
     "Tom Hardy" 
    ), 
    "Changeling" => array(
     "Angelina Jolie" 
    ), 
    "The Game"=> array(
     "Michael Douglas", 
     "Sean Penn" 
    ) 
) 
); 

它应该看起来像:他们已经出现在电影的数量

Angelina Jolie (3)等等...

+0

这仅仅是一个数组,其中有你的企图 – Ghost 2014-11-04 02:29:11

回答

3

如果我underst OOD你想要做什么,你需要重建阵列,这样做一个基本的方法是:

(林不知道,这是最好的方法,在5分钟做到了)

$results = array(); 

foreach($movies as $cat => $films) 
{ 
    foreach($films as $film => $actors) 
    { 
     foreach($actors as $actor) 
     { 
      if(!isset($results[$actor])) 
      { 
       $results[$actor] = array(); 
      } 
      $results[$actor][] = array('cat' => $cat, 'title' => $film); 
     } 
    } 
} 

ksort($results); 

foreach($results as $actor => $films) 
{ 
    $films_count = count($films); 

    echo '- '.$actor.' ('.$films_count.')<br/>'; 
} 

这将返回:

- Angelina Jolie (3) 
- Brian Cox (1) 
- Christian Bale (2) 
- Christina Ricci (1) 
- Johnny Depp (3) 
- Kathryn Newton (1) 
- Katie Featherston (1) 
- Leornardio Dicaprio (1) 
- Michael Douglas (1) 
- Naomi Watts (1) 
- Sean Penn (1) 
- Tom Hardy (2) 

编辑:对不起,忘了排序,完成:)(加在演员电影(电影和猫)的详细信息)

+0

有没有一种方法演员的名字的字母顺序排序?像安吉丽娜第一,然后布莱恩然后基督教?但除此之外,它非常好,谢谢! – kp2630 2014-11-04 02:41:02

2

这可能是也在阵列使用递归行走简化,然后使用array_count_values()

$movies = array ("horror"=>array ("Paranormal Activity"=> array ("Katie Featherston", "Kathryn Newton"), "The Ring"=> array ("Naomi Watts", "Brian Cox"), "Sleepy Hollow"=> array("Johnny Depp", "Christina Ricci")),"action" => array ("The Tourist"=> array ("Johnny Depp", "Angelina Jolie"), "Public Enemies"=> array ("Johnny Depp", "Christian Bale"), "The Dark Knight Rises"=> array ("Christian Bale", "Tom Hardy"), "Salt"=> array ("Angelina Jolie")),"thriller"=> array ("Inception"=> array("Leornardio Dicaprio", "Tom Hardy"), "Changeling" => array("Angelina Jolie"), "The Game"=> array("Michael Douglas", "Sean Penn"))); 
$actors = array(); 
array_walk_recursive($movies, function($val) use (&$actors){ 
    $actors[] = $val; 
}); 

$count = array_count_values($actors); 
ksort($count); 
foreach ($count as $actor_name => $appearances) { 
    echo "$actor_name ($appearances) <br/>"; 
} 

Sample Out