doufengsui7449 2011-02-18 14:54
浏览 16
已采纳

PHP - 简单的重构

I have the following code:

$image_1 = $value->getElementsByTagName("Image1");
$image1  = $image_1->item(0)->nodeValue;

$image_2 = $value->getElementsByTagName("Image2");
$image2  = $image_2->item(0)->nodeValue;

Is there an easier way, to not repeat code If I need $image_3 ?

i.e. how can I refactor this?

Thanks

UPDATE:

I am using the $images_x variables in further code, that also needs refactoring:

UPDATE 2: - My full code:

$image_1 = $value->getElementsByTagName("Image1");
$image1  = $image_1->item(0)->nodeValue;

$image_2 = $value->getElementsByTagName("Image2");
$image2  = $image_2->item(0)->nodeValue;

$image_3 = $value->getElementsByTagName("Image3");
$image3  = $image_3->item(0)->nodeValue;

$filename_1 = basename($image1);
$ch = curl_init ($image1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata_1=curl_exec ($ch);
curl_close ($ch);
$fp = fopen(Mage::getBaseDir('media') . DS . 'import/'.$filename_1,'w');
fwrite($fp, $rawdata_1);
fclose($fp);

$filename_2 = basename($image2);
$ch = curl_init ($image2);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata_2=curl_exec ($ch);
curl_close ($ch);
$fp = fopen(Mage::getBaseDir('media') . DS . 'import/'.$filename_2,'w');
fwrite($fp, $rawdata_2);
fclose($fp);

$filename_3 = basename($image3);
$ch = curl_init ($image3);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata_3=curl_exec ($ch);
curl_close ($ch);
$fp = fopen(Mage::getBaseDir('media') . DS . 'import/'.$filename_3,'w');
fwrite($fp, $rawdata_3);
fclose($fp);

$product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import/' .  $filename_1, array('image', 'small_image','thumbnail'), false, false);
$product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import/' .  $filename_2, array('image', 'small_image','thumbnail'), false, false);
$product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import/' .  $filename_3, array('image', 'small_image','thumbnail'), false, false);
  • 写回答

6条回答 默认 最新

  • doupo6967 2011-02-18 14:58
    关注

    You could use loops:

    $images = array();
    for ($i = 1; $i <= 2; $i++) {
       $images[] = $value->getElementsByTagName("Image" . $i)->item(0)->nodeValue;
    }
    
    // and then you can get an image via $images[0], $images[1] and so on
    

    All code can be rewritten as Brad F Jacobs suggested:

    function downloadAndSave($image) {
        $filename = basename($image);
        $ch = curl_init ($image);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
        $rawdata=curl_exec ($ch);
        curl_close ($ch);
        $fp = fopen(Mage::getBaseDir('media') . DS . 'import/'.$filename,'w');
        fwrite($fp, $rawdata);
        fclose($fp);
        return $filename;
    }
    // here you should have another loop, suppose foreach ($products as $product) {
        for ($i = 1; $i <= 2; $i++) {
           $filename = downloadAndSave($value->getElementsByTagName("Image" . $i)->item(0)->nodeValue);
           $product->addImageToMediaGallery(Mage::getBaseDir('media') . DS . 'import/' .  $filename, array('image', 'small_image','thumbnail'), false, false);
        }
    // end of foreach }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b