2016-11-25 3 views
3

Если я хранить значения, как S5001:31,32,33|S5002:42,44,46|S5003:21,23,25 ... и т.д.значений взрываются, извлекаемые из базы данных PHP

в базе данных, как получить значение, используя implode функцию, так что я могу отобразить знаки отдельно, чтобы найти общие для каждого зарегистрированного номера в таблице HTML?

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

Для вышеуказанного кода я получил неправильный результат. Желаемый результат:

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

Показать код: –

+0

Я добавил код – Dayz

+0

Сохранены ли ваши данные с помощью 'serialize'? – Tiger

ответ

2

Снизу кода вы получите желаемый результат:

$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

Вы можете использовать preg_split читать строки Params:

$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 является core function, что позволяет вы должны взорвать строки, используя регулярное выражение. В этом случае я уже знаю, что сумма элементов, разделенных: и, фиксирована (4 элемента), поэтому я могу также использовать основную функцию list, которая сохраняет результат разделения в четырех определенных переменных ($ num, $ m1 , $ м2, $ м3)

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

регулярное выражение Я/(: |)/состоит на /, которые являются PHP регулярных выражений разделителей и группа синтаксис между круглыми скобками(). Труба в групповой синтаксис означает «или», поэтому это (: |,) означает «find: OR». Так как моя замена шаблон довольно легко, и нет никакой необходимости использовать группы также можно записать в виде диапазона, как это:/[,:]/и это даже лучший выбор

+1

Я думаю, что будет лучше, если вы можете дать небольшое объяснение о регулярном выражении, которое вы использовали, может быть полезно для нового пользователя регулярного выражения, чтобы четко понимать регулярное выражение. –

+0

Вы правы! Я добавил дополнительную информацию о моем фрагменте, надеюсь, теперь будет ясно. –

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

Попробуйте это:

$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; 
Смежные вопросы