我被卡住;我想没有" - "我最后一项的分隔符!我怎样才能做到这一点?我知道我应该使用伯爵,但我不知道该怎么走。
$report = array();
$job = null; //on met la variable a zero
$i = null;
//On extrait les valeurs dans un nouveau tableau à l'aide d'une boucle :
foreach ($values_collaborateurs as $key_collab => $row_collab)//id collab prendra chaque valeur du tableau
{
//ici ne pas mettre de report[key_collab]
//exit(var_dump($values_collaborateurs));
$report[] = $row_collab; // la valeur de id collab = indice collab
//On re extrait les valeurs: boucle du table mission:
//pour chaque élément de $values_missions => id-mission
foreach($values_missions as $key_mission => $row_mission)
{
//ici ne pas mettre de report[key_missions]
// ici la condition de recherche
if ($row_collab[0] == $row_mission[1])
{
$job .= $row_mission[2]." - ";// .= concatenation pr dire s'ajoute a row mission la valeur de job
// rempli le job par des valeurs
}
}
$report[$key_collab][] = $job; //$report = table qui contient chq valeur des key collab, et tout ça tu le stock ds $job
$i = null;
$job = null; //stop - remet le cycle job a zero pour recommencer a null
}
print_r("<pre>\n");
print_r($report);
print_r("<pre>\n");
printf("<br>\n");//passage a la ligne
?>
答案 0 :(得分:0)
使用strlen完成foreach后,你可以删除最后两个字符... foreach($ values_missions as $ key_mission =&gt; $ row_mission) {
//ici ne pas mettre de report[key_missions]
// ici la condition de recherche
if ($row_collab[0] == $row_mission[1])
{
$job .= $row_mission[2]." - ";// .= concatenation pr dire s'ajoute a row mission la valeur de job
// rempli le job par des valeurs
}
}
$job = substr($job,0,strlen($job)-2);
其他解决方案是:
$jobs[] = $row_mission[2]; // instead of: $job .= $row_mission[2] . " - ";
并且在foreach结束后:
$job = implode(" - ", $jobs);
答案 1 :(得分:0)
使用count()
确定项目总数,并将其与每个迭代步骤增加的计数器($current_mission
)进行比较。
然后,只有当前项目不是最后一项时才可以追加分隔符:
$current_mission = 1;
$total_missions = count($values_missions);
foreach($values_missions as $key_mission => $row_mission)
{
//ici ne pas mettre de report[key_missions]
// ici la condition de recherche
if ($row_collab[0] == $row_mission[1])
{
$job .= $row_mission[2];// .= concatenation pr dire s'ajoute a row mission la valeur de job
if ($current_mission < $total_missions) {
$job .= ' - ';
}
// rempli le job par des valeurs
}
++$current_mission;
}
另一种方法是构建一个字符串数组并使用implode()
。
答案 2 :(得分:-1)
我强烈建议不要构建一个数组然后使用implode
,因为它对CPU和内存来说都是太多的开销。如果你选择substr($job,0,strlen($job)-2);
,你最好使用substr($job, 0, -3);
,这完全相同。
如果您更容易阅读,则可以$job .= ' - ' . $row_mission[2];
然后substr($job, 3);
。
在旁注中,您的代码看起来很麻烦:
您使用$report[] = $row_collab;
,后来使用$report[$key_collab][]
,这意味着您使用$report
作为非索引数组和关联数组。您的数据看起来正确可能只是巧合,因为如果$key_collab
和$row_collab
具有相同的值,则它们会相互覆盖。