如何在PHP中的这种数组情况下正确循环?

时间:2014-09-16 14:11:42

标签: php yii

如何根据此样本数组的图像数量来循环和保存数据?

目的:

  • 根据数组样本中的数量保存图像表中的图像
  • 带有“0”(零)后缀的图像是主图像,应标记为“主图像”

    $postdata = array
        (
        'key' => 'adsfasdf34234234235235c',
        'source' => 1,
        'maincategoryid' => 12,
        'subcategoryid' => 34,
        'userid' => 6,
        'shopid' => 1,
        'status' => 1,
        'description'=> 'blah blah blah',
        'image0' => 'blahbalh\big.jpg',
        'image1' => 'hblahblah\smal1.jpg',
        'image2' => 'flowers.jpg',
        'image3' => 'leaf.jpg'
    );
    

这是我的图像表格表字段

IMAGEID,USERID,SHOPID,IMAGEPATH,MAINIMAGE,STATUS

表格中的预期输入应基于上面的示例

IMAGEID,USERID,SHOPID,     IMAGEPATH         ,MAINIMAGE,STATUS
    1     6     1      blahbalh\big.jpg          1        1    
    2     6     1      hblahblah\smal1.jpg       0        1
    3     6     1      flowers.jpg               0        1
    4     6     1      leaf.jpg                  0        1

正如你可以看到数组键中带有零后缀的第一个图像,是列中有标记的主图像

我尝试使用foreach或for循环进行循环,但是当我应该保存4行数据时,我只能从该数组中保存1行数据

我试过这个

$mainimage = 0;
for($i=0; $i < count($postdata); $i++){
     if(!isset($postdata['image'.$i])){
          continue;
       }
      $shopmodel->USERID = $postdata['userid'];
      $shopmodel->SHOPID = $postdata['shopid'];
      $shopmodel->IMAGEPATH = $postdata['image'.$i];
      $shopmodel->MAINIMAGE = $mainimage;
      $shopmodel->STATUS = $postdata['status'];
      if($i == 0 ){
           $shopmodel->MAINIMAGE = 1;
      }
      $shopmodel->save();
}

我知道有一些问题,所以如何根据我的样本循环并实现该目标?

2 个答案:

答案 0 :(得分:0)

您需要调试才能知道出了什么问题。例如。做

var_dump($postdata['image'.$i]);

之前

$shopmodel->USERID = $postdata['userid'];`

所以你会看到你的情况是否正常。

接下来考虑在循环中使用时重置模型:

$model()->unsetAttributes();

并检查此处或代码$shopsmodel VS $shopmodel

中是否拼写错误

答案 1 :(得分:0)

不过,经过几个小时的反复试验,我找到了自己的解决方案来解决这个问题 这是我的解决方案

$ismain = 0;
$images = array();

        for($i=0; $i < count($postdata); $i++){
            if(!isset($postdata['image'.$i])){
                continue;
            }
            array_push($images, $postdata['image'.$i]);
        }

        foreach($images as $key => $image){
            if($key == 0){
                $ismain = 1;
            } else {
                $ismain = 0;
            }
            echo "adid = ". $postdata['shopid']. "; ismain =" .$ismain."; image =". $image."<br/>";

        }

自我注意:在实际的(真实的)应用程序代码中,我在foreach循环中实例化了模型,并初始化了相应的属性..然后调用了模型的save()函数和繁荣......我想要的输出,出现......感谢所有试图帮助我的人......但最后......我以自己的方式帮助自己。欢呼声