2016-06-20 1 views
0

Я застрял; Я хочу, чтобы на моем последнем элементе не было разделителя «-»! Как я могу это сделать? Я знаю, что я должен использовать счет, но я не знаю, как идти дальше.Неотделитель на последнем конце 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 
?> 
+1

Я думаю, что лучше хранить его как массив, а затем 'implode()' it, а не concat, затем обрезка – Chay22

ответ

0

U можно удалить последние две символы после Еогеасп выполняется с использованием StrLen ... Еогеасп ($ values_missions как $ 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 

     } 

     } 
     $job = substr($job,0,strlen($job)-2); 

Другое решение:

$jobs[] = $row_mission[2]; // instead of: $job .= $row_mission[2] . " - "; 

и после Еогеаспа будет закончился:

$job = implode(" - ", $jobs); 
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().

-1

Я настоятельно рекомендую не строить массив, а затем использовать implode, так как это слишком много накладных расходов для процессора и памяти. Если вы идете на 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 имеют одинаковое значение, они перезаписывают друг друга.

+0

Объяснение для downvote было бы красивым и справедливым, мы здесь, чтобы помочь, не так ли? –

+0

У меня нет ни слова, я не знаю, кто это сделал :( – heysabbinah