在foreach的最后一个不是分隔符

时间:2016-06-20 12:40:21

标签: php loops foreach

我被卡住;我想没有" - "我最后一项的分隔符!我怎样才能做到这一点?我知道我应该使用伯爵,但我不知道该怎么走。

$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
?>

3 个答案:

答案 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具有相同的值,则它们会相互覆盖。