Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Foreach_Export - Fatal编程技术网

Php foreach循环导出文件中的上一个数据

Php foreach循环导出文件中的上一个数据,php,loops,foreach,export,Php,Loops,Foreach,Export,我有一个导出脚本,可以将项目导出到csv文件。我想导出csv文件中每个产品行上每个项目的附加图像。 这部分看起来像这样: $img_query=tep_db_query("SELECT additional_images_id, products_id, popup_images FROM " . TABLE_ADDITIONAL_IMAGES . "

我有一个导出脚本,可以将项目导出到csv文件。我想导出csv文件中每个产品行上每个项目的附加图像。 这部分看起来像这样:

$img_query=tep_db_query("SELECT additional_images_id, products_id, popup_images
                                      FROM " . TABLE_ADDITIONAL_IMAGES . " 
                                      WHERE products_id=" . $products['products_id'] ."");

if (!tep_db_num_rows($img_query)) {   
  $imageextra2 = " ";
   } else {
  $img_rows=tep_db_num_rows($img_query);
  while ($img = tep_db_fetch_array($img_query))     {  
            $img2 = $img['popup_images'];
            $pid = $img['products_id'];

                $a = array($img2);
                   foreach($a as &$img){ 

                  }
            foreach($a as $imageextra) {

            $imageextra = "http://www.URL.com/images/". $img2.";";
             $imageextra2 .= $imageextra;
            }
          }     }
但是,当我导出多个具有附加图像的产品时,这些图像将从csv文件中的行A转到下一行。 这是结果的一个例子。每个项目都有一个附加图像:

Item-A;AdditionalImage-A.jpg;AdditionalImage-A2.jpg
Item-B;AdditionalImage-A.jpg;AdditionalImage-A2.jpg;AdditionalImage-B.jpg;AdditionalImage-B2.jpg
Item-C;AdditionalImage-A.jpg;AdditionalImage-A2.jpg;AdditionalImage-B.jpg;AdditionalImage-B2.jpg;AdditionalImage-C.jpg;AdditionalImage-C2.jpg
我该怎么做才能让它工作

干杯, 弗雷德里克

编辑 下面是获取信息并生成导出文件的php完整部分:

<?php
  require('includes/application_top.php');

  if (isset($_POST['create'])) {
    if (isset($_POST['product']) && is_array($_POST['product'])) {

        foreach ($_POST['product'] as $product_id) {
            $products_query_raw = "select p.products_id, p.products_image, p.products_model, products_image_pop, p.products_price, p.products_quantity, p.products_tax_class_id, pd.products_name, pd.products_description from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = $product_id and pd.products_id = p.products_id and pd.language_id = $languages_id";
            $products_query = tep_db_query($products_query_raw);
            if ($products = tep_db_fetch_array($products_query)) {

//++++ QT Pro: End Changed Code
    $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . $products['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");
    $products_attributes = tep_db_fetch_array($products_attributes_query);
    if ($products_attributes['total'] > 0) {
//++++ QT Pro: Begin Changed code
      $products_id = $products['products_id']; 
      require_once(DIR_WS_CLASSES . 'pad_single_radioset_print.php'); 
      $class = 'pad_single_radioset';
      $pad = new $class($products_id);
      $attribs .= $pad->draw();
//++++ QT Pro: End Changed Code
    }

                $product_desc = (isset($_POST['strip_tags']) && ($_POST['strip_tags'] == '1'))
                                ? strip_tags($products['products_description'],'<br>, <li>, </li>, <ul>, </ul>')  //ORG
                                : $products['products_description'];

                $tax_rate = 0;
                $taxes_query_raw = "select tax_rate from " . TABLE_TAX_RATES . " where tax_class_id = " . $products['products_tax_class_id'];
                $taxes_query = tep_db_query($taxes_query_raw);
                while ($taxes = tep_db_fetch_array($taxes_query)) {
                    $tax_rate += $taxes['tax_rate'];
                }
                $tax = ($products['products_price'] * $tax_rate) / 100;
                $stock = $products['products_quantity'];

                $product_desc=preg_replace("/([[:space:]]{2,})/",' ',$product_desc);

// Categories - just show the sub-category      
                $categories_list = Array();
                $categories_query_raw = "select cd.categories_name, cd.categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc, " . TABLE_CATEGORIES_DESCRIPTION . " cd where ptc.products_id = " . $products['products_id'] . " and cd.categories_id = ptc.categories_id and cd.language_id = $languages_id";
                $categories_query = tep_db_query($categories_query_raw);
                while ($categories = tep_db_fetch_array($categories_query)) {
                    $categories_list[] = $categories['categories_name'];
                    $categories_id = $categories['categories_id'];
                }
                $category_name = implode(' / ', $categories_list);

// Additional images    
      $img_query=tep_db_query("SELECT additional_images_id, products_id, popup_images
                                          FROM " . TABLE_ADDITIONAL_IMAGES . " 
                                          WHERE products_id=" . $products['products_id'] ."");

  if (!tep_db_num_rows($img_query)) {     
      $imageextra2 = "; ; ";

  } else {
      $img_rows=tep_db_num_rows($img_query);

      while ($img = tep_db_fetch_array($img_query))     {  
                $img2 = $img['popup_images'];
                $pid = $img['products_id'];

                $a = array($img2);

                $imageextra2 = " "; # This avoid letting the additional images from lines abowe follow.

                foreach($a as $imageextra) {
                $imageextra = "http://www.URL.com/images/". $img2.";";
                $imageextra2 .= $imageextra;
                }
               } 
}

                $export .= 
                           $products['products_model'].';'.
                           $products['products_name'].';'.
                           $product_price.';'.
                           $products['products_quantity'].';'.
                           $product_desc.';'.
                           $categories_id.';'.
                           $shipping_cost.';'.
                           'http://www.URL.com/images/'.basename($products['products_image_pop']).';'.
                           $imageextra2.
                            "\n";
            }
        }


        if ($fp = @fopen($_SERVER['DOCUMENT_ROOT'] . '/feed/t-butik.csv', 'w')) {
            $utf = iconv("windows-1252","ISO-8859-1",$export);
            $out = 'variable_name='.$utf;
            fwrite($fp, $utf);
            fclose($fp);
            $messageStack->add("Feed generates successfully!!!", 'success');
        } else {
            $messageStack->add("ERROR: Permissions error trying to write feed to disk.", 'error');
        }
    }
  }
?>

似乎没有足够的代码为您提供一个绝对答案,但我猜测变量$imageextra 2不会在每次迭代中重置

当您更改产品时,应该重置保存图像的变量,我假定它是$imageextra2

更改此设置

if (!tep_db_num_rows($img_query)) {     
  $imageextra2 = "; ; ";

} else {
  $img_rows=tep_db_num_rows($img_query);

  while ($img = tep_db_fetch_array($img_query))     {  
            $img2 = $img['popup_images'];
            $pid = $img['products_id'];

            $a = array($img2);

            $imageextra2 = " "; # This avoid letting the additional images from lines abowe follow.

            foreach($a as $imageextra) {
            $imageextra = "http://www.URL.com/images/". $img2.";";
            $imageextra2 .= $imageextra;
            }
           } 
}
$imageextra2 = " "; # resets images

if (tep_db_num_rows($img_query)) {     
    $img_rows=tep_db_num_rows($img_query);

    while ($img = tep_db_fetch_array($img_query))     {  
        $img2 = $img['popup_images'];
        $pid = $img['products_id'];

        $a = array($img2);                

        foreach($a as $imageextra) {
            $imageextra = "http://www.URL.com/images/". $img2.";";
            $imageextra2 .= $imageextra;
        }
    } 
}
到此

if (!tep_db_num_rows($img_query)) {     
  $imageextra2 = "; ; ";

} else {
  $img_rows=tep_db_num_rows($img_query);

  while ($img = tep_db_fetch_array($img_query))     {  
            $img2 = $img['popup_images'];
            $pid = $img['products_id'];

            $a = array($img2);

            $imageextra2 = " "; # This avoid letting the additional images from lines abowe follow.

            foreach($a as $imageextra) {
            $imageextra = "http://www.URL.com/images/". $img2.";";
            $imageextra2 .= $imageextra;
            }
           } 
}
$imageextra2 = " "; # resets images

if (tep_db_num_rows($img_query)) {     
    $img_rows=tep_db_num_rows($img_query);

    while ($img = tep_db_fetch_array($img_query))     {  
        $img2 = $img['popup_images'];
        $pid = $img['products_id'];

        $a = array($img2);                

        foreach($a as $imageextra) {
            $imageextra = "http://www.URL.com/images/". $img2.";";
            $imageextra2 .= $imageextra;
        }
    } 
}
致以最良好的祝愿


Jason

如果删除该选项,则导出文件中只会显示一个附加图像,即使该项目有多个附加图像。但这可能是错误的做法。是的,错误的做法。你所要做的就是在一个数组中循环,并且什么也不做。在循环之后,一切都保持在进入循环之前的状态。第一次取消注释时,我一定是做错了什么。我又把它拆了,你完全正确。没有必要把它放在那里。我试着重置($a);和重置($2);但没有一个成功。是否需要更多的代码来重置它$imageextra2是我在决定导出文件中应该包含哪些内容的行中调用的。如果我发布更多的代码会有帮助吗?是的,这可能会使帮助更容易,但是reset()实际上只是将数组倒回到开头。您希望通过执行$imageextra2=''重置处理图像的变量;在每个产品的循环开始时,我尝试过$imageextra2=“”;当我添加该行时,仅导出每个产品的一个附加图像,即使该产品有多个附加图像。但是,它至少是产品的正确图像。我用生成导出的代码的完整部分编辑了我的文章。实际上,//+++++QT Pro部分会产生与其他图像相同的错误,我们会将行中的属性跟随到下一行。NP Fredrik,如果您能接受它作为答案,我们将不胜感激!祝你一切顺利,杰森