0

您好我有一个 javascript 预加载脚本,其中包含一个 php 命令来预加载上传的图像以供将来的 onClick 操作。无论如何,我无法从预加载脚本从中提取的最后一个图像中删除最后一个逗号。

这是脚本:

<div style="display:hidden">
<script type="text/javascript">
    <!--//--><![CDATA[//><!--
        var images = new Array()
        function preload() {
            for (i = 0; i < preload.arguments.length; i++) {
                images[i] = new Image()
                images[i].src = preload.arguments[i]
            }
        }
        preload(

        <?php
            for ($i = 0; $i < 6; $i++) {
                if (!empty($imgs[$i])) {
                    echo "'http://www.samplegallery.com/upload/image.php?img_source_url=" . $imgs[$i] . "&img_resize_to=500',";
                }
            }
        ?>

        )
    //--><!]]>
</script>
</div>

无论如何,我需要找出如何从上传的最后一张图片中删除最后一个逗号。不知道该怎么做。请帮我!顺便说一句...图像没有扩展名,因为它们链接到一个 php 图像脚本,该脚本可以调整它们的大小并将它们放入水印中。希望大家能帮我解惑!

4

5 回答 5

2

换个角度想!逗号可能在开头,然后从第一个逗号中删除:)

if (!empty($imgs[$i])) {
  $comma = $i == 0? '' : ',';
  echo $comma."'http://www.samplegallery.com/upload/image.php?img_source_url=" . $imgs[$i] . "&img_resize_to=500'";
}

如果$i等于 5、8 或 139871,这种方式无关紧要!

于 2013-02-25T22:32:43.143 回答
1

最简单的方法是使用 php 内置implode()函数

<?php echo implode(',', $imgs); ?>

如果你只想要前 6 张图片,你可以像这样制作一个数组

$imgs = array_slice($imgs, 0, 6);

所以整个事情必须是这样的:

preload(
<?php
    $imgs = array_slice($imgs, 0, 6);
    echo implode(',', $imgs);
?>
)
于 2013-02-25T22:35:12.287 回答
0

要从字符串中删除最后一个逗号,只需使用以下命令:

$string = rtrim($string, ",");
于 2013-02-25T22:35:25.700 回答
0

我可以为您的问题提出一种稍微不同的方法吗?每当您想将数据传递给 JavaScript 时,JSON 可能就是您想要生成的东西。json_encode()帮助你。您的脚本可能如下所示:

var urls = <?php echo json_encode(array_values($imgs)); ?>;

var images = [];
function preload(urls) {
    for (var i = 0; i < urls.length; i++) {
        var url = 'http://www.samplegallery.com/upload/image.php?img_source_url='
            + encodeURIComponent(urls[i])
            + '&img_resize_to=500';

        images[i] = new Image();
        images[i].src = url;
    }
}

preload(urls);

请注意,我冒昧地添加了缺少的分号和var声明,以使您的变量保持本地化。我添加了array_values()调用以确保您传递的是数字索引数组,而不是会导致对象文字{ ... }而不是数组 literl的关联数组[ ... ]

我还将 URL 构建移至 JavaScript,因为我没有看到将其保留在 PHP 中的理由。如果您需要它在 PHP 中并且想要避免“手动”循环,请查看array_map().

另请注意,我正在运行您的 URL 片段encodeURIComponent()以正确转义您传入的任何内容。

关于安全性的说明:如果您的脚本/upload/image.php接受任意 URL(和/或“本地文件资源”),请考虑将允许的域和路径列入白名单。

于 2013-02-25T22:50:38.187 回答
0

你可以用foreach...

<?PHP 
    if ($count = count($imgs)) {
        foreach ($imgs as $key=>$img) {
            echo "http://www.samplegallery.com/upload/image.php?img_source_url="
            . $img . "&img_resize_to=500";
            if ($key < $count-1) echo ",";
        }
    }

?>
于 2013-02-25T23:00:36.200 回答