2016-06-20 14 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

私は配列としてそれを格納する方が良いと思います。concatしてからトリミングするのではなく、 'implode()'してください。 – Chay22

答えて

0

foreachのがstrlenを使用して完了した後にUが... foreachの2つの文字の最後の削除することができます($として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] . " - "; 

とforeachの後 は終了します:

$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を使用することを強く推奨します。これは、CPUとメモリの両方のオーバーヘッドが大きすぎるためです。 substr($job,0,strlen($job)-2);の場合は、substr($job, 0, -3);とまったく同じです。

あなたのために読むのが簡単な場合は、$job .= ' - ' . $row_mission[2];、次にsubstr($job, 3);とすることができます。サイドノートでは、あなたのコードにバグが見え

あなたは非インデックス付き配列と連想配列として$reportの両方を使用している意味し、$report[] = $row_collab;を使用し、以降$report[$key_collab][]$key_collab$row_collabに同じ値があると、データが正しいと思われるのは偶然かもしれません。

+0

downvoteの説明は素晴らしく公正です。 –

+0

私はdownvoteしていない私はこれをした人がわからない:( – heysabbinah

関連する問題