重复功能的奇怪行为

时间:2012-02-13 15:26:52

标签: php arrays loops foreach

我有一个功能: 从数据库中获取序列化数组, 反序列化, 将一个项添加到数组的末尾, 序列化它 并使用新数组更新数据库。

当我自己运行该函数时,这工作正常。我可以刷新页面,每次它都会向数组中添加一个项目。当我print_r数组时,我可以看到它已将我的新项目添加到数组中,为其分配下一个可用的数字键。

然而,当我在foreach循环中运行此函数而不是在每个循环中添加一个项目时,它会在第一个循环中添加一个项目,然后在每个循环之后添加一个项目,之后它只修改在第一个循环中创建的项目。

public function updateImage($image, $product_id)
{       
    // Some code here to write the file, not relevant to my question.

    // Process the $image parameter to get $image_src.  
    // The product images are held in an array.

    // Get the serialized array from the database

    $objProduct = $this->Database->prepare("SELECT name, images FROM tl_iso_products WHERE id = ?")->execute($product_id);

    $images = array();

    // Unserialize the result to get the array of images

    $images = unserialize($objProduct->images); 

    // Add the new image to the array   

    $images[] = array(
            'src' => $image_src,
            'alt' => $objProduct->name,
            'link' => '',
            'desc' => '',
            'translate' => '',
    );      

    // Update the database with the new array

    $this->Database->prepare("UPDATE tl_iso_products SET images = ? WHERE id = ?")->execute(serialize($images),$product_id);                        
}

这是数组的开头,只有一个图像:

Array
(
    [0] => Array
        (
            [src] => image1.jpg
            [alt] => Image alt text
            [link] => 
            [desc] => 
            [translate] => 
        )

)

刷新页面以使该功能运行几次,每次更改图像名称:

Array
(
    [0] => Array
        (
           [src] => image1.jpg
            [alt] => Image alt text
            [link] => 
            [desc] => 
            [translate] => 
        )
    [1] => Array
        (
            [src] => image2.jpg
            [alt] => Image alt text
            [link] => 
            [desc] => 
            [translate] => 
    )
    [2] => Array
       (
            [src] => image3.jpg
            [alt] => Image alt text
            [link] => 
            [desc] => 
            [translate] => 
      )

)

在foreach循环中运行该函数,该函数应具有与上述相同的效果:

Array
(
 [0] => Array
     (
         [src] => image1.jpg
         [alt] => Image alt text
         [link] => 
         [desc] => 
         [translate] => 
     )
  [1] => Array
     (
         [src] => image3.jpg
         [alt] => Image alt text
         [link] => 
         [desc] => 
         [translate] => 
     )
)

不是在每次循环时添加新项目,而是在第一个循环中添加一个新项目,然后在每个循环之后覆盖它。

每次循环时,都应从数据库中获取数组,该数组将由前一个循环更新。知道为什么不发生这种情况的任何想法?

这是所请求的foreach循环,它运行一个数组,其中包含图像网址和需要添加到的产品的ID:

foreach($arrImages as $image)
{
     $this->updateImage($image['url'], $image['product_id']); 
}

0 个答案:

没有答案