Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于公共字符串对数组项进行分组_Php_Arrays_Grouping - Fatal编程技术网

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

Php 基于公共字符串对数组项进行分组,php,arrays,grouping,Php,Arrays,Grouping,我有以下代码,它获取两个单独的数组,翻转姓氏和名字(也删除逗号),并输出: 导演:伯特和伯蒂 作者:伯特和伯蒂 制片人:路易斯·奈特 制片人:迈尔斯·威尔克斯 制片人:安迪·韦尔奇 演员:克雷格·帕金森 演员:卡米拉·卢瑟福 演员:保罗·巴塔查吉 演员:福特·基曼 演员:哈巴狗莫伦 演员:汉娜·沃尔特斯 DP:Lynda Hall 切:马特·乔丹 我需要做的是将类似的组分组,以输出如下内容: $roles = array(); for($i = 0; $i < $arrayrole1; $

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

导演:伯特和伯蒂

作者:伯特和伯蒂

制片人:路易斯·奈特

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

制片人:安迪·韦尔奇

演员:克雷格·帕金森

演员:卡米拉·卢瑟福

演员:保罗·巴塔查吉

演员:福特·基曼

演员:哈巴狗莫伦

演员:汉娜·沃尔特斯

DP:Lynda Hall

切:马特·乔丹

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

$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 />";
}
导演:伯特和伯蒂

作者:伯特和伯蒂

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

演员:克雷格·帕金森、卡米拉·卢瑟福、保罗·巴特卡吉、福特·基曼、帕格犬莫伦、汉娜·沃尔特斯

DP:Lynda Hall

切:马特·乔丹

当前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 />';
    } 
?>
GetFieldValue(“人名”);
$arraynamel=计数($arrayname);
$arrayrole=explode(“:”,$dwzXmlRec_1->GetFieldValue(“PERSON_函数”);
$arrayrole=计数($arrayrole);
$name=“Lastname,Firstname”;
$names=分解(“,”,$name);
$name=$names[1]。" " . $名称[0];
对于($i=0;$i)
更新:只有一个问题,数据是从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 />";
    }
}
//打印每个角色的人员列表
foreach($rolename=>$people的角色){
如果($rolename!=“剪切”&&$rolename!=“制作人”&&$rolename!=“DP”&&$rolename!=“编剧”){
如果($rolename==“Actor”){$rolename=“Cast”;};
echo$rolename.:“.内爆(“,”,$people)。“
”; } }
我将构建一个数组,将角色名称映射到担任该角色的人员的数组。可能类似于:

$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 />";
}
$roles=array();
对于($i=0;$i<$arrayrole1;$i++){
$names=explode(“,”,$arrayname[$i]);
$name=$names[1]。“”.$names[0];
//将名称附加到填充角色的人员数组中
$roles[$arrayrole[$i]][]=$name;
}
//打印出每个角色的人员列表
foreach($rolename=>$people的角色){
echo$rolename.:“.内爆(“,”,$people)。“
”; }
如果提前知道角色名,则可以将角色名放入数字数组中,并在该数组上进行迭代,仅按显示顺序拉出要显示的角色名。类似于
$displayRoles=array(“导演”、“制片人”、“演员”…);