Php 具有多个数组的Foreach循环
这就是我想要的:Php 具有多个数组的Foreach循环,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,这就是我想要的: $\u POST['something']和$\u POST['example']是来自具有 name=“something[]”和name=“example[]” 问题: 通过这种方式,我将向数据库发送两次数据。所以我需要一个解决方案,在这个方案中,我可以通过2个数组循环,而不需要对数据进行两次排序 编辑 两个数组的大小始终相同 在mysql_查询中,我将有其他元素,而不仅仅是row、row2,这些元素将是静态的,没有任何数组 您的解决方案似乎不会发送两次数据。除非发出
$\u POST['something']
和$\u POST['example']
是来自具有
name=“something[]”
和name=“example[]”
问题:
通过这种方式,我将向数据库发送两次数据。所以我需要一个解决方案,在这个方案中,我可以通过2个数组循环,而不需要对数据进行两次排序 编辑
- 两个数组的大小始终相同
- 在mysql_查询中,我将有其他元素,而不仅仅是row、row2,这些元素将是静态的,没有任何数组
- 您的解决方案似乎不会发送两次数据。除非发出查询后出现具有相同值的记录。这可能意味着您应该在构造查询之前处理数据
一种解决办法可以是:
$sql = array();
foreach($_POST['something'] as $something){
foreach($_POST['example'] as $example){
$sql[] = "INSERT INTO table (row, row2) VALUES ('{$something}','{$example}')";
}
}
foreach($sql as $query){
mysql_query($query);
}
$cnt=count($_POST['something']);
$cnt2=计数($_POST['example']);
如果($cnt>0&&$cnt==$cnt2){
$insertArr=array();
对于($i=0;$i你的意思是:
foreach($_POST['something'] as $key => $something) {
$example = $_POST['example'][$key];
$query = mysql_query("INSERT INTO table (row, row2) VALUES ('{$something}','{$example}')");
}
我认为最好的方法是作为单个循环来构建查询。即使数组的长度不同,这也应该有效:
$size1 = count($_POST['something']);
$size2 = count($_POST['example']);
if( $size1 >= $size2 ) {
$size = $size1;
} else {
$size = $size2;
}
$sql = "INSERT INTO table (row, row2) VALUES";
$values = array();
for( $i=0; $i<$size; $i++ ) {
$values[] = "('" . mysql_real_escape_string($_POST['something'][$i]) . "','" . mysql_real_escape_string($_POST['example'][$i]) . "')";
}
$sql .= implode(",", $values);
mysql_query($sql);
$size1=count($\u POST['something']);
$size2=计数($_POST['example']);
如果($size1>=$size2){
$size=$size1;
}否则{
$size=$size2;
}
$sql=“插入表(行,行2)值”;
$values=array();
对于($i=0;$i尽管您已经选择了答案,但不要忘记,如果POST值不是数组,则此脚本可能会失败。您可以通过一小段代码来克服此问题:
$something = is_array($_POST['something']) ? $_POST['something'] : array();
$example = is_array($_POST['example']) ? $_POST['example'] : array();
/* Get all the keys from both arrays
* If they don't share the keys, none will be lost
*/
$keys = array_merge(array_keys($something),array_keys($example));
$keys = array_unique();
if (count($keys)) {
$sql = 'INSERT INTO table (row, row2) VALUES ';
$values = array();
foreach ($keys as $key) {
// Single quotes for PHP, we are not expanding variables
// If the element cannot be converted into a string, don't show the error on screen
$values[] = '("' . @mysql_real_escape_string($something[$key]) . '","' . @mysql_real_escape_string($example[$key]) . '")';
}
$sql .= implode(',', $values);
mysql_query($sql);
}
多阵列的解决方案
试一试-
(一)
或2)
具有多个阵列的Foreach循环:
foreach($_POST['quantity'] as $key=>$quantity)
{
$product_no=$_POST['product_id'][$key];
echo $product_no;
echo $quantity;
}
我不明白您是如何发送两次数据的。如果您在foreach
中放置回音,您可以显示一些示例输出吗?您应该测试$insertar
是否有元素。@premiso:为什么不简单地将条件$cnt>0
添加到$cnt=$cnt2
?:)因为这是一个漫长的过程ng!嘿,谢谢@permiso的回答,这似乎很好,但是,除了某物和示例之外,我应该如何在mysql_查询中添加其他元素,我也想在他们面前添加一个id
。我尝试了类似的方法,但没有效果:|$query=“INSERT-INTO-table(id,something,example)值“.”({$id},“.introde(“,”,$insertArr)。”;
如果$\u POST的值大于$\u POST[something]然后一些值将丢失。我正试图根据OP关于将数据发送到数据库两次的评论来准确解释OP的要求。我怀疑这就是他的意思,但难以解释。好吧,这是可行的,但我得到一个错误:警告:foreach()提供的参数无效在第63行的example.php中
但我完全使用了你的写作方式。嘿,那是另外一回事,我读错了行:D lol非常感谢这正是我想要的工作方式;)只需记住在插入数据之前转义你的数据,正如其他人所暗示的那样,为什么你在每一篇像这样的帖子上都发布相同的答案?一个就足够了。。。
$something = is_array($_POST['something']) ? $_POST['something'] : array();
$example = is_array($_POST['example']) ? $_POST['example'] : array();
/* Get all the keys from both arrays
* If they don't share the keys, none will be lost
*/
$keys = array_merge(array_keys($something),array_keys($example));
$keys = array_unique();
if (count($keys)) {
$sql = 'INSERT INTO table (row, row2) VALUES ';
$values = array();
foreach ($keys as $key) {
// Single quotes for PHP, we are not expanding variables
// If the element cannot be converted into a string, don't show the error on screen
$values[] = '("' . @mysql_real_escape_string($something[$key]) . '","' . @mysql_real_escape_string($example[$key]) . '")';
}
$sql .= implode(',', $values);
mysql_query($sql);
}
<?php
$ZZ = array('a', 'b', 'c', 'd');
$KK = array('1', '2', '3', '4');
foreach($ZZ as $index => $value) {
echo $ZZ[$index].$KK[$index];
echo "<br/>";
}
?>
<?php
$ZZ = array('a', 'b', 'c', 'd');
$KK = array('1', '2', '3', '4');
for ($index = 0 ; $index < count($ZZ); $index ++) {
echo $ZZ[$index] . $KK[$index];
echo "<br/>";
}
?>
foreach($_POST['quantity'] as $key=>$quantity)
{
$product_no=$_POST['product_id'][$key];
echo $product_no;
echo $quantity;
}