我有一个工作的PHP脚本,通过一个巨大的文件,并提取特定的电影标题和评级。但现在我的任务是“排序”他们,所以带有'xxx'的电影标题列在底部。我已经调查了usort,但是我已经编写了这个脚本,这是最好的方法吗?或者有更简单的方法吗?
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>";
}
}
?>
输出:
- 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
需要将带有XXX的标题排在最底层。
答案 0 :(得分: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>";
}