Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 具有多个数组的Foreach循环_Php_Arrays_Loops_Foreach - Fatal编程技术网

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;
      }