【问题标题】:Foreach array with different values具有不同值的 foreach 数组
【发布时间】:2013-04-29 21:37:45
【问题描述】:

需要一点帮助,我总是遇到愚蠢的错误,当我尝试这样做时,我想 foreach 数组,并在其中执行一个 for 循环,这可能吗? 这是我的代码

$image = new SimpleImage();
$slike=array($_FILES['slika1']['tmp_name'],$_FILES['slika2']['tmp_name'],$_FILES['slika3']['tmp_name'],$_FILES['slika4']['tmp_name']);

$koliko = count($slike);

foreach ($slike as $slika) {

    for ($i = 1; $i <= $koliko; $i++)
    {
        $slicica="../images/usluge/".mysql_insert_id()."-".$i.".jpg";
        $image->load($slika);
        $image->resizeToWidth(800);
        $image->save($slicica);
    }
}

我想获取具有此名称的新图片,例如。如果最后一个 id 为 2,我想获取此文件名等

  • 2-1.jpg
  • 2-2.jpg
  • 2-3.jpg
  • 2-4.jpg

仍然使用我的代码我没有得到正确的值:( 或者也许有简单的方法来做到这一点:)

【问题讨论】:

  • 你得到的这些“愚蠢的错误”是什么?您目前获得的价值观是什么?
  • 我没有得到任何错误,但我只有一张相同的图片,最后一张图片相同,但名称为 2-1.jpg、2-2.jpg、2-3。 jpg,2-4.jpg。就像所有以前的图片都被覆盖了:(
  • mysql_insert_id() 将在循环的每次迭代中为您返回相同的值,除非您在每次迭代中都进行插入。
  • 我想在文件名中包含 mysql_insert_id(),这不是问题,当我想添加 -1、-2、-3 等时出现问题
  • 你使用的Linux平台是什么?

标签: php loops for-loop foreach


【解决方案1】:

我认为您需要的是替换以下行:

$image->load($slika);

对于这个:

$image->load($slike[$i-1]);

【讨论】:

  • 对不起,我已经更新了答案中的代码,它有一个索引错误,请再次尝试新代码..
  • 尼尔森,你是国王,这是最好的解决方案,你是最好的。像魅力一样工作,txanks!
  • 你能帮帮我吗,我有 $slike 数组,如何查看有空值并取消设置?
  • 不知道你到底想要什么......对于你有unset()的取消设置数组项并检查空is_empty()..
【解决方案2】:

你的 foreach 可能有问题,就像我们在数组上执行 var_dump 一样,我们将看到以下内容:

array(3) { [0]=> string(5) "test1" [1]=> string(4) "tes2" [2]=> string(5) "test3" }

所以你需要把它改成:

foreach ($slike as $key => $slika) {

您也可以使用move_uploaded_file 来实现您想要做的事情并使用linux 命令convert

foreach ($slike as $key => $slika) {

    for ($i = 1; $i <= $koliko; $i++)
    {
        $slicica="../images/usluge/".mysql_insert_id()."-".$i.".jpg";
        if(move_uploaded_file(slika,slicica)){ 
            exec("convert $slicica -resize 200 $slicica");
        }else{die('problem loading the file');}

    }
}

【讨论】:

  • @take 我看到了这个:$_FILES['slika1']['tmp_name'] 这就是为什么我建议使用move_uploaded_file
  • 是的,我看到它很晚,这就是我删除评论的原因。对不起。
  • @user2266992 尝试调试你的变量,添加一些var_dump($variables)
【解决方案3】:
$i=1;
// insert into mysql table..
// [...]
$mysqlId = mysql_insert_id();
foreach ( $_FILES as $key => $value) {

    $slicica="../images/usluge/".$mysqlId."-".$i.".jpg";
    if(move_uploaded_file($_FILES[$key]["tmp_name"],slicica)){ 
        $image->load($slicica);
        $image->resizeToWidth(800);
        $image->save($slicica);
    }
    else {
        // error handling
    }
    $i++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多