Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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 - Fatal编程技术网

带有变量更改的php循环简化

带有变量更改的php循环简化,php,Php,很确定我的标题需要修改,但无论如何,我有这个循环。背景信息,我有36个输入“类型”,需要逐个插入。如果该值有某些内容。。设置为变量,如果不设置为NULL 我的问题是,我是否可以执行一个循环来完成这项工作,而不必列出其中的36项 使用php版本5.2.17 if (!empty($_POST['type1'])){ $type1 = $_POST['type1']; } else $type1 = NULL; if (!empty

很确定我的标题需要修改,但无论如何,我有这个循环。背景信息,我有36个输入“类型”,需要逐个插入。如果该值有某些内容。。设置为变量,如果不设置为NULL

我的问题是,我是否可以执行一个循环来完成这项工作,而不必列出其中的36项

使用php版本5.2.17

    if (!empty($_POST['type1'])){
        $type1 = $_POST['type1'];
    }
    else 
        $type1 = NULL;

    if (!empty($_POST['type2'])){
        $type2 = $_POST['type2'];
    }
    else 
        $type2 = NULL;

    if (!empty($_POST['type3'])){
        $type3 = $_POST['type3'];
    }
    else 
        $type3 = NULL; // to 36...
php/html

<?php 
    for ($i = 1; $i < 37; $i++){
    echo "Type$i:<input name='type$i' type='text' size='20' maxlength='35' /><br />";
    }
 ?>

在php和表单输入上使用数组

$type = array();

for ($i = 1; $i <= 36; $i++) {
    if (isset($_POST['type'][$i])){
        $type[$i] = $_POST['type'][$i];
    }
}
$type=array();

要使($i=1;$i实际定义所有这些变量,请使用:

($i=1;$i<37;$i++)的
{
$varname=“键入$i”;
如果(!空($\u POST[$varname])){
$$varname=$\u POST[$varname];
}
否则{
$$varname=NULL;
}
}

其他人建议改为使用数组(原则上我同意),但这是问题的实际答案。

只是一个名为$post的数组示例

$post = array(
'type1' => 'one',
'name' => 'test',
'type3' => 'three'

);
$matches  = preg_grep ('^type[0-9]^', array_keys($post));

foreach ($matches as $val) {
$$val = $post[$val];
}

var_export($type1);

问题已更新为不使用数组。将保留在此处,以便有人查找可以使用数组的答案。


您可以将
$\u POST
数组添加到预定义的值数组中,将结果存储在另一个数组中。例如:

<?php
$defaults = array(
    "type1" => NULL,
    "type2" => NULL,
    "type3" => NULL,
    "type4" => NULL
    // etc
);
$_POST = array(
    "type1" => 1,
    "type2" => "foo"
);
$types = $_POST + $defaults;
print_r($types);
然后,对于html循环:

for ($i = 1; $i < 37; $i++){
    echo "Type$i:<input name='" . $types["type" . $i] . "' type='text' size='20' maxlength='35' /><br />\n";
}
($i=1;$i<37;$i++)的
{
echo“Type$i:
\n”; }
需要注意的是,这与使用带有
的检查略有不同

$i = 0;
$myinputs = 36;

while($i<$myinputs){
 $i++;
 if(empty($_POST['type'.$i.''])){
    $type[$i] = $_POST['type'.$i.''];
 }else{
    $type[$i] = null;
 }



}

print_r($type);
$i=0;
$myinputs=36;

而($I)如果将标记中的输入名称定义为数组,则会简单得多:
键入[]
,或者您可以做同样的事情:通过post变量循环。开始问题:为什么需要它们作为单独的变量?看起来数组真的可以…当然可以,但以后调试会很麻烦(您无法轻松找到定义变量的位置)。那很好,我只是在寻找答案,我不想使用数组。使用for循环?但@wrikken的评论仍然是正确的,你现在不想使用数组,但调试会变得很糟糕。是的!确实有效,谢谢。我知道数组可以工作,有5000种方法可以做任何事情。我想要一个简单的解决方案不必重做整个脚本就可以解决我的问题。谢谢。如果你能向我解释一下为什么使用两个$$in$$varname?所有这些都在有关变量的PHP文档链接中进行了解释。请这样想:假设
$i=6
。然后
$varname=“type6”
,而
$$varname
与说
$type6
相同。
Array
(
    [type1] => 1
    [type2] => foo
    [type3] =>
    [type4] =>
    ...
)
for ($i = 1; $i < 37; $i++){
    echo "Type$i:<input name='" . $types["type" . $i] . "' type='text' size='20' maxlength='35' /><br />\n";
}
$i = 0;
$myinputs = 36;

while($i<$myinputs){
 $i++;
 if(empty($_POST['type'.$i.''])){
    $type[$i] = $_POST['type'.$i.''];
 }else{
    $type[$i] = null;
 }



}

print_r($type);