【问题标题】:Group Arrays By Another Array?按另一个数组分组数组?
【发布时间】:2016-04-21 15:06:36
【问题描述】:

我正在尝试按另一个数组对一个数组进行排序。这两个数组都从表单中获取内容。

这是我的表单代码:

<form method="post" action="">

<div class="groupcontainer">
<br/><label>Group One:</label><br/>
<input type="text" name="groupname[]" value="groupone" /><br/>
<br/><label>Variable Group One:</label><br/>
<input type="text" name="variable[]" value="variableone" />
<input type="text" name="variable[]" value="variabletwo" />
</div>

<br/>

<div class="groupcontainer">
<br/><label>Group Two:</label><br/>
<input type="text" name="groupname[]" value="grouptwo" /><br/>
<br/><label>Variable Group Two:</label><br/>
<input type="text" name="variable[]" value="variablethree" />
<input type="text" name="variable[]" value="variablefour" />
</div>

<br/>
<input type="submit" name="submit" value="Submit" />
</form>

这是 PHP 代码:

<?php

if (!$_POST['submit'] == "") {
    foreach($_POST['groupname'] as $groupname) {
        $groupnum = 1;
        foreach($_POST['variable'] as $variable) {  
            print "$".$groupname.$groupnum." = '".$variable."';<br/>";
            $groupnum++;
        }
        print "$".$groupname." = array(";
        for ($arrnum = 1; $arrnum <= count($_POST['variable']); $arrnum++) {
            print "$".$groupname.$arrnum.", ";
        }
        print ");<br/><br/>";
    }
}

?>

这是我提交表单时得到的结果:

$groupone1 = '$variableone';
$groupone2 = '$variabletwo';
$groupone3 = '$variablethree';
$groupone4 = '$variablefour';
$groupone = array($groupone1, $groupone2, $groupone3, $groupone4, )

$grouptwo1 = '$variableone';
$grouptwo2 = '$variabletwo';
$grouptwo3 = '$variablethree';
$grouptwo4 = '$variablefour';
$grouptwo = array($grouptwo1, $grouptwo2, $grouptwo3, $grouptwo4, )

这是我真正想要的结果:

$groupone1 = '$variableone';
$groupone2 = '$variabletwo';
$groupone = array($groupone1, $groupone2)

$grouptwo1 = '$variablethree';
$grouptwo2 = '$variablefour';
$grouptwo = array($grouptwo1, $grouptwo2)

整个事情需要是动态的,因为我想添加尽可能多的组和变量。

我这几天一直在寻找答案,并且已经问过两个不知道答案的人。也许你们可以帮忙。谢谢!

更新:

澄清几点:

  1. 所以基本上我希望能够添加任意数量的输入表单(我为此使用 jQuery)来创建任意数量的组和变量,例如:

    $groupwuteva1 = '你好'; $groupwuteva2 = '再见':

    $randomname1 = '绿色'; $randomname2 = '蓝色'; $randomname3 = '红色';

    $blabla1 = 'abc'; $blabla2 = 'xyz'; $blabla3 = '123'; $blabla4 = 'bla';

  2. 我用作组名的任何内容都将在数组一中使用,例如我称一个组为“颜色”,我为该组输入的变量是“蓝色”、“红色”和“绿色”。然后我会得到这个代码:

    $colors1 = '绿色'; $colors2 = '蓝色'; $colors3 = '红色';

我希望这能澄清一些问题。非常感谢到目前为止的所有回复!

【问题讨论】:

  • 如果不进行重大更改,我认为您不会通过这种方法实现您想要的。看起来您假设 PHP POST 数组将遵循 HTML 的嵌套结构,但事实并非如此。 POST 数组将在一个数组中包含“组名”,在单独的数组中包含“变量”,但没有说明它们之间的关系。
  • 感谢大家的帮助。但是,发布的所有解决方案看起来都需要我为输入提供固定名称,例如 name="groupone",这需要适合第一个数组的 value="..." 的输入。但是给他们固定的名字会错过在表格中输入名字的意义......也许我只是不明白:P

标签: php html arrays string


【解决方案1】:

您可以将组名作为一个容器来存储所有关联的变量值。之后,使用variable variablesimplode() 函数来处理您的html 表单。

HTML

<form method="post" action="">

<div class="groupcontainer">
<br/><label>Groupe One:</label><br/>
<input type="text" name="groupname[]" value="groupone" /><br/>
<br/><label>Variable Group One:</label><br/>
<input type="text" name="groupone[]" value="variableone" />
<input type="text" name="groupone[]" value="variabletwo" />
</div>

<br/>

<div class="groupcontainer">
<br/><label>Groupe Two:</label><br/>
<input type="text" name="groupname[]" value="grouptwo" /><br/>
<br/><label>Variable Group One:</label><br/>
<input type="text" name="grouptwo[]" value="variablethree" />
<input type="text" name="grouptwo[]" value="variablefour" />
</div>

<br/>
<input type="submit" name="submit" value="Submit" />
</form>

PHP

if(isset($_POST['submit'])){
    foreach($_POST['groupname'] as $value){
        $arr = array();
        $i = 1;
        foreach($_POST[$value] as $v){
            $var = $value . $i;
            $$var = $v;
            echo $var . " = " . $$var . "<br />";
            $arr[] = $$var;
            ++$i;
        }

        $output = $value . " = array(" . implode(",", $arr) . ")";
        echo $output . "<br /><br />";
    }
}

输出:

groupone1 = variableone
groupone2 = variabletwo
groupone = array(variableone,variabletwo)

grouptwo1 = variablethree
grouptwo2 = variablefour
grouptwo = array(variablethree,variablefour)

【讨论】:

  • 您好 Rajdeep,感谢您的回答。这绝对有帮助。唯一的问题是,这仅在我调用组 grouponegrouptwo 等时才有效。如果我想调用其他名称,我会收到此错误:警告:为 foreach() 提供的参数无效。例如,如果我将组名 colors 放入表单中,那么变量的名称需要是 name="colors[]" 对吗?有没有办法做到这一点?谢谢!
  • @db225 嗯,这应该可以。请将您的 HTML 代码发布到 pastebin.com 并在此处分享链接。
  • @db225 您的代码运行良好。您现在面临的问题是什么?
  • 您好,感谢您检查代码。我现在已经更改了组名和变量名,也许现在你知道我的意思了。 pastebin.com/M6YYXqd6
  • @db225 您已将所有组和所有变量任意命名为groupone[]。通过这种方式,您永远无法对组名和相关变量进行分组。在我看来,this method 更加健壮,非常适合您的情况。
【解决方案2】:

试试这个表格:

<form method="post" action="">
    <?php foreach(array('groupone', 'grouptwo') as $num):?>
        <div class="groupcontainer">
            <br/><label>Groupe <?php echo $num;?>:</label><br/>
            <input type="text" name="groupname[]" value="<?php echo $num;?>" /><br/>
            <br/><label>Variable Group <?php echo $num;?>:</label><br/>
            <input type="text" name="variable[<?php echo $num;?>][]" value="<?php echo uniqid();?>" />
            <input type="text" name="variable[<?php echo $num;?>][]" value="<?php echo uniqid();?>" />
        </div>

        <br/>
    <?php endforeach;?>

    <input type="submit" name="submit" value="Submit" />
</form>

和代码:

if ($_POST) {
    foreach($_POST['groupname'] as $groupname) {
        $$groupname = array();

        foreach($_POST['variable'][$groupname] as $variable) {
            ${$groupname}[] = $variable;
        }
    }

    var_dump($groupone);
    var_dump($grouptwo);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2022-01-23
    • 2013-12-30
    相关资源
    最近更新 更多