4

次のコードは、2 つの個別の配列を取得し、姓と名を反転させ (コンマも削除します)、これを出力します。

監督:バート&バーティ

ライター:バート&バーティ

プロデューサー:ルイーズ・ナイト

プロデューサー:マイルズ・ウィルクス

プロデューサー:アンディ・ウェルチ

俳優:クレイグ・パーキンソン

俳優:カミラ・ラザフォード

俳優:ポール・バッターチャージー

俳優:フォード・キーマン

俳優:マウレン・ザ・パグ

俳優:ハンナ・ウォルターズ

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

更新: 1 つだけ質問があります。データは xml ノードから設定され、"as" 配列にあるため、1 つの役割が別の役割よりも優先されます。たとえば、「Actor」が最初に来て、次に「Director」が来ます。ディレクターが最初に来てからキャストになるように、それを逆にする簡単な方法はありますか? 不要な役割/人を非表示にするコードを追加しました。以下を参照してください。

// 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 に答える