2016-11-25 2 views
3

Wenn ich Werte wie S5001:31,32,33|S5002:42,44,46|S5003:21,23,25 gespeichert ... etc.Implode Werte aus der Datenbank PHP abgerufen

in der Datenbank, wie die Werte mit implode Funktion abzurufen, so dass ich die Spuren separat angezeigt werden können für jede registrierte Nummer insgesamt finden in HTML-Tabelle?

$internalmark_col="mark_internal"; 
     $student_internal_marks_array = array(); 
     if(isset($student_internal_mark->$internalmark_col)) 
     { 
      $internalmarks_stud_code_arr=explode(',',$student_internal_mark->$internalmark_col); 
      foreach($internalmarks_stud_code_arr as $marks_each) 
      { 
       $internalcode_mark=explode(':',$marks_each); 
       if(isset($internalcode_mark[0]) && isset($internalcode_mark[1])) 
        $student_internal_marks_array[$internalcode_mark[0]]=$internalcode_mark[1]; 
      } 

     } 

     print_r($student_internal_marks_array); 
     exit; 

Für den obigen Code habe ich falsch ausgegeben. Gewünschte Ausgabe ist:

Register No | Mark 1 | Mark 2 |Mark 3 | Total 
------------------------------------- 

S5001  | 3 | 2 | 3 | 8 

S5002  |4 | 4 |6 | 14 

S5003  |1 |3 |5 | 9 
+0

Zeigen Sie uns Ihren Code –

+0

Ich habe den Code – Dayz

+0

hinzugefügt Sind Ihre Daten mit 'serialize' gespeichert? – Tiger

Antwort

2

Von unten Code wird Ihnen gewünschte Ausgabe:

$data = "S5001:31,32,33|S5002:42,44,46|S5003:21,23,25"; 
    $d = explode("|",$data); 
    foreach ($d as $value) { 
     $register_no_arr = explode(":",$value); 
     $register_no = $register_no_arr[0]; 
     $marks = explode(',',$register_no_arr[1]); 
     echo '<br>Register No :- '.$register_no; 
     for($i=0;$i<sizeof($marks);$i++){ 
      echo "<br>Mark ".($i+1)." :- ".$marks[$i]; 
     } 

    } 
2

können Sie preg_split verwenden, um die Zeile params zu lesen:

$str = 'S5001:31,32,33|S5002:42,44,46|S5003:21,23,25'; 


$table = '<table> 
<tr> 
<th>Register No</th> 
<th>Mark 1</th> 
<th>Mark 2</th> 
<th>Mark 3</th> 
<th>Total</th> 
</tr>'; 

$internalmarks_stud_code_arr=explode('|', $str); 
foreach($internalmarks_stud_code_arr as $marks_each) 
{ 
    list($num, $m1, $m2, $m3) = preg_split('/(:|,)/',$marks_each); 
    $table .= ' 
     <tr> 
      <td>'.$num.'</td> 
      <td>'.$m1.'</td> 
      <td>'.$m2.'</td> 
      <td>'.$m3.'</td> 
      <td>'.($m1 + $m2 + $m3).'</td> 
     </tr>'; 

} 
$table .='</table>';   
print $table; 

preg_split ist ein core function, die erlaubt Sie explodieren Strings mit einem Regex. In diesem Fall weiß ich bereits, dass die Summe der Elemente, getrennt durch: und, fest ist (4 Elemente), so dass ich auch die list Kernfunktion verwenden kann, die das Ergebnis der Aufteilung in vier definierten Variablen ($ num, $ m1 , $ m2, $ m3)

list($num, $m1, $m2, $m3) = preg_split('/(:|,)/',$marks_each); 

Die Regex I used/(: |)/durch /, die php regex Trennzeichen und eine Gruppe Syntax zwischen runden Klammern() aus. Die Pipe in Gruppensyntax bedeutet "oder", also bedeutet dies (: |,) "find: OR,". Da mein Ersatz Muster ist ganz einfach und es gibt keine Notwendigkeit Gruppen verwenden es auch als Bereich wie folgt geschrieben werden kann:/[,:]/und es ist sogar eine bessere Wahl

+1

Ich denke, es wird besser sein, wenn Sie eine kleine Erklärung über die Regex geben können, die Sie verwendet haben, kann für neue Regex-Benutzer hilfreich sein, Regex klar zu verstehen. –

+0

Sie haben Recht! Ich habe mehr Informationen über meinen Ausschnitt hinzugefügt, hoffe, dass es jetzt klarer ist –

1
$tot =0; 
$internalmark_col = S5001:31,32,33|S5002:42,44,46|S5003:21,23,25; 
$m = explode('|',$internalmark_col); 
echo '<tr>'; 
foreach($m as $mark){ 
    $scode = explode(':',$mark); 
    echo '<td>'.$scode[0].'</td>'; 
    $code = $scode[1]; 
    $smark = explode(',',$code); 
    foreach($smark as $student_mark){ 
     echo '<td>'.$student_mark.'</td>'; 
     $tot += $student_mark; 
    } 
    echo '<td>'.$tot.'</td>'; 
} 
echo '</tr>'; 
0

Try this:

$array = 'S5001:31,32,33'; 
$str = str_replace(":", ",", $array); 

list($register, $mark1, $mark2, $mark3) = explode(',', $str); 

echo "<br>Register:" . $register . "<br>Mark1:" . $mark1 . "<br>Mark2:" . $mark2 . "<br>Mark3:" . $mark3; 
Verwandte Themen