基于公共字符串对数组项进行分组

4
我有以下代码,它获取两个不同的数组,翻转姓氏和名字(同时删除逗号),并输出如下内容:

导演:Bert & Bertie

作者:Bert & Bertie

制片人:Louise Knight

制片人:Miles Wilkes

制片人:Andy Welch

演员:Craig Parkinson

演员:Camilla Rutherford

演员:Paul Bhattarcharjee

演员:Ford Kieman

演员:Maurren the Pug

演员:Hannah Walters

摄影师:Lynda Hall

剪辑:Matt Chodan

我需要做的是将相似的组分组以输出类似于以下内容:

导演:Bert & Bertie

作者:Bert & Bertie

制片人:Louise Knight, Miles Wilkes, Andy Welch

演员:Craig Parkinson, Camilla Rutherford, Paul Bhattarcharjee, Ford Kieman, Maurren the Pug, Hannah Walters

摄影师:Lynda Hall

剪辑: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”是一个角色在另一个角色之前。例如,“演员”先出现,然后是“导演”。是否有任何简单的方法可以反转它,以便导演先出现,然后是演员?我已经添加了代码来隐藏不需要的角色/人员,请参见下面:

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

如果角色名称提前已知,您可以将角色名称放入数字数组中,并迭代该数组,按照您想要的顺序仅提取要显示的角色名称。类似于 $displayRoles = array("导演", "制片人", "演员", ...); - Joe Day
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 />";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接