4

我有以下代码,它获取两个单独的数组,翻转姓氏和名字(也删除了逗号)并输出:

导演:伯特和伯蒂

作家:伯特和伯蒂

制片人:路易丝·奈特

制片人:迈尔斯·威尔克斯

制片人:安迪·韦尔奇

演员:克雷格·帕金森

演员:卡米拉·卢瑟福

演员:保罗·巴塔查吉

演员:福特·基曼

演员:哈巴狗莫伦

演员:汉娜·沃尔特斯

DP:琳达大厅

剪辑:马特·乔丹

我需要做的是对类似的组进行分组以输出如下内容:

导演:伯特和伯蒂

作家:伯特和伯蒂

制片人:路易丝·奈特、迈尔斯·威尔克斯、安迪·韦尔奇

主演:克雷格·帕金森,卡米拉·卢瑟福,保罗·巴塔查吉,福特·基曼,哈巴狗莫伦,汉娜·沃尔特斯

DP:琳达大厅

剪辑:马特·乔丹

当前 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”中,因此一个角色先于另一个角色。例如,首先是“演员”,然后是“导演”。有什么简单的方法可以扭转它,让导演先来然后演员?我添加了代码来隐藏不需要的角色/人员,如下所示:

// 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 />";
    }
}
4

1 回答 1

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 />";
}
于 2012-10-17T01:49:41.793 回答