如何针对依赖于值的单独字符串展开implode()

时间:2011-01-27 16:31:14

标签: php mysql arrays implode

在我页面的各个地方,我在while循环中使用mysql_fetch_array()将值复制到新的PHP数组中。从那里我使用implode()将值写入字符串以显示给用户。当我只处理一列或两列可以组合成一行显示时,这对我来说很好。

现在我正在处理一个包含两个数据,角色和名称的数组。我想根据角色的值在不同的行上显示输出字符串。这是一个图书馆数据库,所以我想要所有与作者在一行上的角色相关的名字,发布者在另一行上的角色名称,等等。

$sql = mysql_query("select role, party_name from vw_roles where publication_id =  
$id order by role", $link);
while($role = mysql_fetch_array($sql)) {
    $roles[] = $role[role] . ": ". $role[party_name]; }
$the_roles = implode(" ; ", $roles);

输出: 作者:Origen;书商:Gulielmus Morden;书面文本评论员:Tarin,Jean;书面文本评论员:Hoeschel,David;编辑:斯宾塞,威廉;打印机:琼。海斯

但是后来我需要尝试将字符串拆分成各种子字符串,这样在输出表格中只输出作者只有Origen。是否更好地通过数组$ roles []并将名称分成该角色的新数组?所以

if ($roles[role] == "Author") 
    $author[] = $roles[party_name]; 

每个角色都有某种形式的迭代?但是,我需要为角色指定每个可能的值,以防它被包含在这个特定记录中,这将使代码很长。

一定有更好的方式在这里继续,我还没有找到它。任何想法?

1 个答案:

答案 0 :(得分:2)

$sql = mysql_query("select role, party_name from vw_roles where publication_id =  
$id order by role", $link);
while($role = mysql_fetch_array($sql)) {
    $roles[$role[role]][] = $role[party_name]; }
foreach($roles as $role => $values) {
  echo "Role ".$role.": " implode(" ; ", $values);
}

不确定这是不是你的意思?