如何添加或显示动态数组变量

时间:2015-09-04 12:06:58

标签: php mysql sql arrays dynamic-programming

我将多维后置变量转换为动态变量,如下所示:

foreach($_POST as $k => $v){
   ${$k} = $v;
}

所以我的新数组看起来像这样:

Array(
   [name] => Joe
   [surname] => Blogs
   [study] => Array
        (
            [0] => English
            [1] => IT
        )
   [school] => Array
        (
            [0] => Array
                (
                    [0] => Some School Name
                    [1] => 03/09/2015
                    [2] => Present
                )    
        )
)

因此,如果我想获得学校名称,此代码将起作用:

echo $school[0][0];

但是,我正在努力在sql语句中使用这个变量,如下所示:

$sql = "INSERT INTO table (name, surname, subject_1, subject_2, school1_name, school1_datefrom, school1_dateto) VALUES ('$name', '$surname', '$subject[0]', '$subject[1]', '$school[0][0]', '$school[0][1]', '$school[0][2]', '$school[0][3]')";

echo $sql;

所有不是数组或单级数组的变量(如study)都显示正常,但像$school[0][0]这样的学校变量显示为'数组[0]', '阵列[1]' ......... 为什么它这样做并且在那里我可以正确显示这些变量?

3 个答案:

答案 0 :(得分:2)

如果将数组值包装在{}中,那么它应该可以正常工作。我不记得这背后的原因,但试试吧。

$sql = "INSERT INTO table (name, surname, subject_1, subject_2, 
                           school1_name, school1_datefrom, 
                           school1_dateto) 
              VALUES ('$name', '$surname', '{$subject[0]}', 
                      '{$subject[1]}', '{$school[0][0]}',
                       '{$school[0][1]', '{$school[0][2]}', 
                       '{$school[0][3]}')";

我现在记得称为复杂(卷曲)语法

不是因为语法很复杂,而是因为它允许使用复杂的表达式。

答案 1 :(得分:0)

将变量包装在 {} 中,它应该有效。大括号用于明确指定变量名称的结尾。

...快速

$number = 4;
print "You have the {$number}th edition book";
//output: "You have the 4th edition book";

没有花括号PHP试图找到一个名为$ numberth的变量,它不存在!

希望这会有所帮助。

Ref.

答案 2 :(得分:0)

替换

$sql = "INSERT INTO table (name, surname, subject_1, subject_2, school1_name, school1_datefrom, school1_dateto) VALUES ('$name', '$surname', '$subject[0]', '$subject[1]', '$school[0][0]', '$school[0][1]', '$school[0][2]', '$school[0][3]')";

$sql = "INSERT INTO table (name, surname, subject_1, subject_2, school1_name, school1_datefrom, school1_dateto) VALUES ('$name', '$surname', '{$subject[0]}', '{$subject[1]}', '{$school[0][0]}', '{$school[0][1]}', '{$school[0][2]}', '{$school[0][3]}')";