我有以下代码,它抓取两个单独的数组,翻转姓氏和名字(也删除逗号)并输出:
导演:Bert&贝尔蒂
作家:Bert&贝尔蒂
制片人:Louise Knight
制片人:Miles Wilkes
制片人:Andy Welch
演员:克雷格帕金森
演员:卡米拉卢瑟福
演员:Paul Bhattarcharjee
演员:福特基曼
演员:Maurren the Pug
演员:汉娜沃尔特斯
DP:Lynda HallCut:Matt Chodan
我需要做的是将类似的组分组以输出如下内容:
导演:Bert&贝尔蒂
作家:Bert&贝尔蒂
制片人:Louise Knight,Miles Wilkes,Andy Welch
演员:Craig Parkinson,Camilla Rutherford,Paul Bhattarcharjee,Ford Kieman,Maurren the Pug,Hannah Walters
DP:Lynda HallCut:Matt Chodan
当前的PHP代码:
<?php
$arrayname=explode(":::",$dwzXmlRec_1->GetFieldValue("PERSON_NAME"));
$arraynamel=count($arrayname);
$arrayrole=explode(":::",$dwzXmlRec_1->GetFieldValue("PERSON_FUNCTION"));
$arrayrolel=count($arrayrole);
$name = "Lastname, Firstname";
$names = explode(", ", $name);
$name = $names[1] . " " . $names[0];
for($i=0;$i<$arrayrolel;$i++)
{
$names = explode(", ", $arrayname[$i]);
$name = $names[1] . " " . $names[0];
echo $arrayrole[$i].': '.$name.'<br />';
}
?>
更新:只有一个问题,数据是从xml节点设置的,因为它在数组“as”中是一个角色来自另一个角色。例如,'Actor'首先出现,然后是'Director'。有没有任何简单的方法来反转它,所以Director先来然后Cast?我添加了隐藏不需要的角色/人员的代码,如下所示:
// print out the list of people in each role
foreach($roles as $rolename => $people) {
if ($rolename!="Cut" && $rolename!="Producer" && $rolename!="DP" && $rolename!="Writer"){
if($rolename=="Actor") { $rolename="Cast";};
echo $rolename . ": " . implode(", ", $people) . "<br />";
}
}
答案 0 :(得分:3)
我会构建一个数组,将角色名称映射到填充该角色的人员阵列。可能是这样的:
$roles = array();
for($i = 0; $i < $arrayrole1; $i++) {
$names = explode(", ", $arrayname[$i]);
$name = $names[1] . " " . $names[0];
// append the name to the array of people filling the role
$roles[$arrayrole[$i]][] = $name;
}
// print out the list of people in each role
foreach($roles as $rolename => $people) {
echo $rolename . ": " . implode(", ", $people) . "<br />";
}