PHP - 基于常见字符串数组分组项目 [英] PHP - Grouping Array Items Based on Common String

查看:198
本文介绍了PHP - 基于常见字符串数组分组项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的code这抓住了两个独立的阵列,翻转姓氏和名字(也删除逗号)和输出这样的:


  

导演:伯特和放大器;伯蒂


  
  

编剧:伯特和放大器;伯蒂


  
  

制片人:路易斯·奈特


  
  

制片人:万里威尔克斯


  
  

制片人:安迪·韦尔奇


  
  

演员:克雷格·帕金森


  
  

演员:卡米拉卢瑟福


  
  

演员:保罗Bhattarcharjee


  
  

演员:福特Kieman


  
  

演员:Maurren哈巴狗


  
  

演员:汉娜·沃尔特斯


  
  

DP:林达大厅


  
  

剪切:马特Chodan


我需要做的就是将类似的群体输出是这样的:


  

导演:伯特和放大器;伯蒂


  
  

编剧:伯特和放大器;伯蒂


  
  

制片人:路易斯·奈特,万里威尔克斯,安迪·韦尔奇


  
  

演员:克雷格·帕金森,卡米拉卢瑟福,保罗Bhattarcharjee,福特Kieman,Maurren的哈巴狗,汉娜·沃尔特斯


  
  

DP:林达大厅


  
  

剪切:马特Chodan


目前PHP code:

 < PHP
$ arrayName中=爆炸(:::,$ dwzXmlRec_1-> GetFieldValue(PERSON_NAME));
$ arraynamel =计数($ arrayName中);
$ arrayrole =爆炸(:::,$ dwzXmlRec_1-> GetFieldValue(PERSON_FUNCTION));
$ arrayrolel = COUNT($ arrayrole);$名=姓氏,名字;
$名称=爆炸(,,$名);
$名称= $姓名[1]。 。 $名称[0];为($ I = 0; $ I< $ arrayrolel; $ I ++)
    {
        $名称=爆炸(,$ arrayName中的[$ i]);
        $名称= $姓名[1]。 。 $名称[0];
        回声$ arrayrole [$ i]':'$名称'< BR />';。
    }
?>

任何帮助将大大AP preciated!

更新:只是一个问题,将数据从一个XML节点设置,并且由于它是在阵为是一个角色来之前另一回事。例如,演员是第一位的,然后'导演'。有没有简单的方法来扭转这种局面,让导演至上再投?我已经加入code隐藏不需要的角色/人民见下图:

  //打印出来的人在每个角色列表
的foreach($角色$角色名= GT; $人){
    如果(!$角色名=剪切和放大器;&安培; $角色名=生产者和安培;!&安培; $角色名=DP&放大器;!&安培; $角色名=作家!){
        如果($角色名==演员){$角色名=投;};
        回声$角色名。 :。爆(,$人)。 < BR />中;
    }
}


解决方案

我要建立一个角色名称映射到人谁填补这个角色一个数组的数组。也许是这样的:

  $角色=阵列();
为($ I = 0; $ I< $ arrayrole1; $ I ++){
    $名称=爆炸(,$ arrayName中的[$ i]);
    $名称= $姓名[1]。 。 $名称[0];
    //名称追加到人们的阵列填充的作用
    $角色[$ arrayrole [$ i]] [] = $名称;
}//打印出的人员列表中的每个角色
的foreach($角色$角色名= GT; $人){
    回声$角色名。 :。爆(,$人)。 < BR />中;
}

I have the following code which grabs two separate arrays, flips the surname and firstname (also removes the comma) and outputs this:

Director: Bert & Bertie

Writer: Bert & Bertie

Producer: Louise Knight

Producer: Miles Wilkes

Producer: Andy Welch

Actor: Craig Parkinson

Actor: Camilla Rutherford

Actor: Paul Bhattarcharjee

Actor: Ford Kieman

Actor: Maurren the Pug

Actor: Hannah Walters

DP: Lynda Hall

Cut: Matt Chodan

What I need to do is to group similar groups to output something like this:

Director: Bert & Bertie

Writer: Bert & Bertie

Producer: Louise Knight, Miles Wilkes, Andy Welch

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

DP: Lynda Hall

Cut: Matt Chodan

Current PHP Code:

<?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 />';
    } 
?>

Any help would be greatly appreciated!

UPDATE: Just one question, the data is set from an xml node, and since it's in array "as" is One role comes before another. For Example, 'Actor' comes first, then 'Director'. Is there any easy method to reverse it, so that Director comes first then Cast? I have added code to hide the unwanted roles/peoples see below:

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

解决方案

I would build an array that maps role names to an array of people who filled that role. Possibly something like this:

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

这篇关于PHP - 基于常见字符串数组分组项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆