使用foreach来获取除最后一个键,值对之外的所有键

时间:2012-03-15 16:20:01

标签: php

我有一个带有很多单选按钮的表单,最后是一个隐藏字段。

我循环遍历所有输入值,将它们放入INSERT中:

$count=count($_POST);
$counter=0;
$queryV="INSERT INTO `notes_value` ( `style_color`, `value` ) VALUES ";
$sku = $_POST['number'];  //this is the one value coming from a hidden input

    foreach ($_POST AS $key => $value) {
        if ($counter < $count -1 )
        $queryV.= "('$sku', '$value'),";
        elseif ($counter = $count -1 )
        $queryV.= "('$sku', '$value');";
        $counter++; 
    }

我将使用$key将单独的INSERT用于另一个表,但我的问题是我在$queryV中不需要的最终隐藏输入我需要所有的除了上一个$_POST

之外的值

我在这里给了我类似的东西:

INSERT INTO `notes_value` ( `sku`, `data` ) VALUES ('12595200010037', 'yes'),('12595200010037', '12595200010037');

这是一个只选择了一个单选按钮的例子。在这种情况下,我希望它只返回一个$sku, $value对。我从不想要来自此$key, $value的最后foreach。所以我想看到这个:

INSERT INTO `notes_value` ( `sku`, `data` ) VALUES ('12595200010037', 'yes');

5 个答案:

答案 0 :(得分:3)

从我的观点来看,也许我不理解问题:

$queryV = "INSERT INTO `notes_value` ( `style_color`, `value` ) VALUES ";
$sku = $_POST['number'];
array_pop($_POST);
$values = array();
foreach ($_POST AS $key => $value) 
{
    $values[] = "('$sku', '$value')";
    // use $key for another query
}
$queryV .= implode(', ', $values) . ';';

答案 1 :(得分:0)

$ counter 应该从一个开始吗?

$counter=1;

答案 2 :(得分:0)

如果我理解,你想构建一个查询并跳过数组中的最后一个键/值对。你有一行elseif ($counter = $count -1 )。首先,这应该是==,但也许这是在这里引入的拼写错误而不是在您的实际代码中。其次,$counter == $count-1实际上是最后一项,而不是倒数第二项。*要跳过最后一项,只需将其更改为$counter == $count-2即可。

*为什么?因为数组索引从0开始,但数组中的项数从1开始。例如,如果数组有4个元素,则数组长度为4,元素位于索引0,1,2和3。倒数第二个元素位于索引2。

答案 3 :(得分:0)

查看array_pop http://uk.php.net/array_pop

所以基本上在进入你的循环调用array_pop($_POST)之前。 那说你不应该真正修改超级全球(恕我直言),所以你可能会看到:

$postedData = $_POST; 
array_pop($postedData);
foreach ($postedData as $key => $value) {
...

答案 4 :(得分:0)

包含此功能:

function insert(  )
{       
    $args = func_get_args();

    $table = $args[0];
    unset( $args[0] );

    $return = true;

    foreach( $args as $set )
    {
        $columns = implode( '`,`', array_keys( $set ) );
        $values = implode( "','", array_values( $set ) );
        $return =& query( "INSERT INTO {$table} (`{$columns}`) VALUES ('{$values}')" );
    }

    return $return;
}

然后在您的代码中使用:

$data = Array(
    'key1' => $value1,
    'key2' => $value2
);
insert('table', $data);

对于您的实际解决方案,您将使用:

$data = $_POST;
array_pop($data); //Removes the last element in the array

insert('table', $data);