Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:分析变量_Php_Variables - Fatal编程技术网

PHP:分析变量

PHP:分析变量,php,variables,Php,Variables,我正在为学校创建一个网站 我有一个学生的科目保存在数据库中 它是这样保存的-->1,2,3,6,7 这意味着学生X没有科目ID 1、2、3、6和7 来自一个学生的主题从数据库返回一个变量$subjects 我想输出主题名称(主题名称也存储在数据库中)。 但是,由于$subjects中返回的变量不是一个subject,而是多个subject,因此我无法搜索subject名称。是否可以将$subjects转换为数组,以便在我的示例中$subjects[0]为1,$subjects[1]为2(请参见上

我正在为学校创建一个网站

我有一个学生的科目保存在数据库中

它是这样保存的-->1,2,3,6,7

这意味着学生X没有科目ID 1、2、3、6和7

来自一个学生的主题从数据库返回一个变量$subjects 我想输出主题名称(主题名称也存储在数据库中)。 但是,由于$subjects中返回的变量不是一个subject,而是多个subject,因此我无法搜索subject名称。是否可以将$subjects转换为数组,以便在我的示例中$subjects[0]为1,$subjects[1]为2(请参见上文@it's get save like this)

简单地说: 不应该这样 $subjects=1,2,3,6,7 但是

可以使用将字符串转换为数组:

explode(',', $students);
但是,应该注意的是,分解然后对数据库进行更多查询以获取主题名称是一种非常低效的方法。你应该为这种关系创建一个完整的表,而不是将学生的主题存储在一个字段中。因此,除了学生表和科目表之外,还存在以下关系:

表:学生受试者

Student | Subject
-----------------
   1    |   1
   1    |   2
   1    |   3
   1    |   6
   1    |   7
   2    |   2
   2    |   4
   2    |   6
   2    |   8
   3    |   3
然后,您可以查询数据库,并在一次查询中获得特定学生或学生组的学科名称列表。

您可以选择两种方式:

爆炸:

<?php
$str = '1,2,3,6,7';
$chars = explode(',', $str);
print_r($chars);
?>

或预分割:

<?php
$str = '1,2,3,6,7';
$chars = preg_split('/,/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>


您可以让数据库本身直接给出名称,但要做到这一点,您必须通过为学生和科目之间的N-to-M关系创建联接表来规范模式。谷歌一点。@Carsten,这似乎可以做到!谢谢你,伙计!当explode足够时,没有理由使用preg_split。
<?php
$str = '1,2,3,6,7';
$chars = preg_split('/,/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>