Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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 CSV输出的引号太多_Php_Magento_Magento 1.6 - Fatal编程技术网

Php CSV输出的引号太多

Php CSV输出的引号太多,php,magento,magento-1.6,Php,Magento,Magento 1.6,下面的代码应该将4个字段输出到CSV中,类别、SKU、价格和特殊价格,并且在大多数情况下运行良好,除了输出在所有项目周围有3个引号,如 """Joystick Head""","""Man222""","""155""","""124.95""" 然而,浏览器中的输出很好 Type: "Joystick Head" SKU: "Man222" Price: "155" Special Price: "124.95" 我尝试了str_replace,内爆以及我能想到的任何其他方法,结果各不相同

下面的代码应该将4个字段输出到CSV中,
类别、SKU、价格和特殊价格
,并且在大多数情况下运行良好,除了输出在所有项目周围有3个引号,如

"""Joystick Head""","""Man222""","""155""","""124.95"""
然而,浏览器中的输出很好

Type: "Joystick Head" SKU: "Man222" Price: "155" Special Price: "124.95"
我尝试了
str_replace
内爆
以及我能想到的任何其他方法,结果各不相同,有时甚至成功地删除了几乎所有的引号

我希望这是件愚蠢的事情,我已经盯着它看太久了,救命啊

define('SAVE_FEED_LOCATION','var/export/prices.csv');
set_time_limit(0);
require_once 'app/Mage.php';
Mage::app('default');

try{
    $handle = fopen(SAVE_FEED_LOCATION, 'w'); 

    $attributeName = 'producttype';

    $products = Mage::getModel('catalog/product')->getCollection();
    $products->addAttributeToFilter('status', 1);
    $products->addAttributeToFilter('visibility', 4);
    $products->addAttributeToSelect('*');
    $prodIds = $products->getAllIds();

    $product = Mage::getModel('catalog/product');

    $counter_test = 0;

    foreach($prodIds as $productId) {

        if (++$counter_test > 0 && $counter_test < 100){

            $product->load($productId);
            $product_data = array();    
            $productId = $product->getId();

            $productAtt = Mage::getModel('catalog/product')->load($productId);
            $attributes = $productAtt->getAttributes();

            $attributeValue = null;     
            if(array_key_exists($attributeName , $attributes)){
                $attributesobj = $attributes["{$attributeName}"];
                $attributeValue = $attributesobj->getFrontend()->getValue($productAtt);
            }
            if ($attributeValue == "No")
            {
                $attributeValue = NULL;
            }

            $product_data['producttype'] = $attributeValue;
            $product_data['sku'] = $product->getSku();  
            $product_data['price'] = round($product->getPrice(),2);
            $product_data['special_price'] = round($product->getSpecialprice(),2);  

            // if no special price use normal price
            if ($product_data['special_price'] == NULL) { 
                $product_data['special_price'] = round($product->getPrice(),2);
            }

            foreach($product_data as $k=>$val){
                $bad=array('"',"\r\n","\n","\r","\t");
                $good=array(""," "," "," ","");
                $product_data[$k] = '"'.str_replace($bad,$good,$val).'"'; 
            }

            echo "Type: ". $product_data['producttype'] . " SKU: " . $product_data['sku'] . " Price: ". $product_data['price'] . " Special Price: " . $product_data['special_price'] . "<br>";

            fputcsv($handle, $product_data, ',', '"');
        }
    }
    fclose($handle);
    echo '<br> Completed at: ' . time();
}
catch(Exception $e){
    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    error_log($e->getMessage(), 1, 'myemail@mydomain.com', $headers);
    die($e->getMessage());
}
define('SAVE_FEED_LOCATION','var/export/prices.csv');
设置时间限制(0);
需要一次“app/Mage.php”;
Mage::app('default');
试一试{
$handle=fopen(保存馈送位置'w');
$attributeName='producttype';
$products=Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status',1);
$products->addAttributeToFilter('visibility',4);
$products->addAttributeToSelect('*');
$prodIds=$products->GetAllID();
$product=Mage::getModel('catalog/product');
$counter_test=0;
foreach($prodIds作为$productId){
如果(++$counter_test>0&&$counter_test<100){
$product->load($productId);
$product_data=array();
$productId=$product->getId();
$productAtt=Mage::getModel('catalog/product')->load($productId);
$attributes=$productAtt->getAttributes();
$attributeValue=null;
如果(数组\键\存在($attributeName,$attributes)){
$attributesobj=$attributes[“{$attributeName}]”;
$attributeValue=$attributesobj->getFrontend()->getValue($productAtt);
}
如果($attributeValue==“否”)
{
$attributeValue=NULL;
}
$product_data['producttype']=$attributeValue;
$product_data['sku']=$product->getSku();
$product_data['price']=round($product->getPrice(),2);
$product\U data['special\U price']=round($product->getSpecialprice(),2);
//如果没有特殊价格,使用正常价格
如果($product_data['special_price']==NULL){
$product\U data['special\U price']=round($product->getPrice(),2);
}
foreach($k=>$val的产品数据){
$bad=数组(“”、“\r\n”、“\n”、“\r”、“\t”);
$good=数组(“,”,“,”,“,”);
$product_data[$k]='”。str_replace($bad,$good,$val)。”;
}
echo“类型:.$product_data['producttype']”。“SKU:.$product_data['SKU']”。“价格:.$product_data['Price']”。“特价:.$product_data['Price']”。
“; fputcsv($handle,$product_data,',','); } } fclose($handle); 回显“
在:”.time()完成; } 捕获(例外$e){ $headers='内容类型:text/html;charset=iso-8859-1'。“\r\n”; 错误日志($e->getMessage(),1,'myemail@mydomain.com“,$headers); 死亡($e->getMessage()); }
问题已经解决了

$product_data[$k] = '"'.str_replace($bad,$good,$val).'"';
在这里,代码向数组的每个值添加双引号。稍后,
fputcsv()
通过将引号三倍以正确输出CVS格式的数据来转义引号。您可以查看中的示例,以了解这是一种正常行为

3倍双引号没有错,因为它只是一种在原始数据中保留双引号的方法,同时通过CSV传输将值传递给另一个系统。但是,如果您故意去掉双引号,那么该行看起来像是输入错误。预计将是:

$product_data[$k] = str_replace($bad, $good, $val);


附加注释

  • 不需要从值中去掉双引号。这不是一个问题 CSV的错误符号。我建议删除坏符号的双引号,不要介意三个双引号
  • str\u replace()
    可以将数组作为第三个数组 论点因此,您可以在一次调用中替换所有错误值,而不是在每个周期中进行替换。例如:
    $product\u data=str\u replace($bad,$good,$product\u data)
  • 您不需要在每个节点上重新声明坏值数组和好值数组 循环迭代。它们不会在脚本中更改,因此可以修改它们的声明 移动到foreach($prodIds作为$productId){行的前面