如果我将值存储为S5001:31,32,33|S5002:42,44,46|S5003:21,23,25
......等等。
在数据库中,如何使用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 :(得分: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];
}
}
答案 1 :(得分:2)
您可以使用preg_split来读取行参数:
$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,$ m2,$ m3)
list($num, $m1, $m2, $m3) = preg_split('/(:|,)/',$marks_each);
我使用的正则表达式/(:|,)/由/它们是php正则表达式分隔符和圆括号()之间的组语法组成。管道分组语法的意思是“或”,所以这个(:|,)表示“find:OR”。由于我的替换模式非常简单,并且不需要使用组,因此它也可以写成这样的范围:/ [,:] /并且它甚至是更好的选择
答案 2 :(得分: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>';
答案 3 :(得分: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;