0

I have a working php script that goes through a huge file and pulls out specific movie titles and ratings. But now my assignment is to "sort" them so the movie titles with the 'xxx' are listed at the bottom. I've looked into usort, but with the script I already have written, would that be the best way to go? Or is there a simpler way?

PHP SCRIPT:

<?php

foreach (glob("*.mov") as $filename)

$theData = file_get_contents($filename) or die("Unable to retrieve file data");

$months = ['January' => '_01', 'February' =>  '_02', 'March' => '_03', 'April' => '_04', 'May' => '_05', 'June' => '_06', 'July' => '_07', 'August' => '_08', 'September' => '_09', 'October' => '_10', 'November' => '_11', 'December' => '_12'];

foreach($months as $key => $month){
  if(strpos($filename,$month)!==false){
        echo "<div style ='text-shadow: 0 1px 0 #222222; margin-left: 5%; margin-top: 20px; margin-bottom: 10px; font:18px Verdana,tahoma,sans-serif;
                color:#218555; font-weight:bold;'>- Movie List for $key 2013 -</div>";

    }
}


$string = $theData;
$titles = explode("\n", $string);

function getInfo($string){
    $Ratings = ['G', 'PG', 'PG-13', 'R', 'NR', 'XXX'];
    $split = preg_split("/\"(.+)\"/", $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
    if(count($split) == 3){ 
        preg_match("/(".implode("|", $Ratings).")\s/", $split[0], $matches);
        $rating = $matches[0];
        return ["title" => $split[1], "rating" => $rating];
    }
    return false;
}

foreach($titles as $title){
    $info = getInfo($title);
    if($info !== false){
        echo "<div style ='margin-left:5%; margin-bottom: 3px; 
                font:14px Verdana,tahoma,sans-serif;color:green;'>
                 {$info["title"]} : {$info["rating"]}</div>";
    }
}
?>

OUTPUTS:

- Movie List for May 2013 -
(HD) Identity Thief : PG-13
(HD) Escape from Planet Earth : PG
(HD) Dark Skies : PG-13
(HD) The Guilt Trip : PG-13
(HD) Jack Reacher : PG-13
(HD) Les Miserables : PG-13
(HD) Mama : PG-13
(HD) Safe Haven : PG-13
(HD) A Place at the Table : PG
(HD) Cirque du Soleil: Worlds Away : PG
(HD) Rise of the Guardians : PG
(HD) Fun Size : PG-13
(HD) Shanghai Calling : PG-13
(HD) The Package : NR
(HD) The House at the End of the Street : PG-13
Beautiful Creatures : PG-13
The Incredible Burt Wonderstone : PG-13
Jack the Giant Slayer : PG-13
Parental Guidance : PG
The Hobbit: An Unexpected Journey : PG-13
Cloud Atlas : PG-13
Life of Pi : PG
Chasing Mavericks : PG
Taken 2 : PG-13
Adult title 1 : XXX
Fat Burning Hip Hop Dance Party : G
Fat Burning Hip Hop Dance Grooves : G
Aladdin : G
Americano : NR
Missing Brendan : NR
Point Doom : NR
Gullivers Travels : G
The Little Princess : PG
Jack And The Beanstalk : PG
To the Arctic : G
Adult title 2 : XXX

Need to get the titles with XXX to sort to the bottom.

4

1 回答 1

1

我建议您首先建立一个信息详细信息列表,如下所示:

$infolist = array();
foreach($titles as $title){
    $info = getInfo($title);
    if($info !== false){
        $infolist[] = $info;
    }
}

然后您可以轻松地对该列表进行排序,usort因为现在可以轻松访问评级:

usort($infolist, "infosort");

function infosort($lhs,$rhs) {
  return strcmp($lhs['rating'], $rhs['rating']);
}

最后,您可以从 infolist 数组中写出排序后的结果:

foreach ($infolist as $info) {
  echo "<div style ='margin-left:5%; margin-bottom: 3px;
          font:14px Verdana,tahoma,sans-serif;color:green;'> 
           {$info["title"]} : {$info["rating"]}</div>";
}
于 2013-06-03T19:59:21.183 回答