2012-03-15 40 views
1

我有一个带有大量单选按钮的表单,然后在最后有一个隐藏字段。使用foreach抓取除最后一个键,值对之外的所有对象

我循环通过所有的输入值,将它们放到这样一个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'); 
+0

'elseif($ counter = $ count -1)' - 你的意思是'elseif($ counter == $ count -1)''? – 2012-03-15 16:34:27

回答

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) . ';'; 
+0

ahh跳过第一个元素,这正是我所需要的。谢谢! – Zac 2012-03-15 16:39:09

0

应该$计数器从一开始?

$counter=1; 
+0

难道不会跳过第一个元素,而不是最后一个? – octern 2012-03-15 16:49:47

+0

我不确定是否会根据($ counter <$ count -1) – 2012-03-26 09:10:15

0

如果我明白了,你想建立一个查询,并跳过数组中的最后一个键/值对。你有行elseif ($counter = $count -1)。首先,这应该是==,但也许这是一个打字错误,而不是实际的代码。其次,当$counter == $count-1这实际上是最后一项,而不是倒数第二项。*要跳过最后一项,只需将其更改为$counter == $count-2

*为什么?由于数组索引从0开始,但数组中的项的数量从1开始。例如,如果数组有四个元素,则数组的长度为4,元素位于索引0,1,2和3处。下一个到最后一个元素是索引2

0

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

所以基本上标题进入你的循环调用之前array_pop($_POST)。 这就是说,你真的不应该修改超全局(恕我直言),所以你可能在看:

$postedData = $_POST; 
array_pop($postedData); 
foreach ($postedData as $key => $value) { 
... 
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); 
相关问题