从PHP中删除最后一个逗号,该逗号将进入javascript图像预加载脚本


Removing last comma from out in PHP that is going into a javascript image pre-load script

嗨,我有一个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图像脚本,该脚本会调整它们的大小并将它们放入水印中。希望你们能帮我想想!

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

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,这种方式无关紧要!

最简单的方法是在implode()函数中使用php构建

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

如果你只想要前6张图像,你可以制作一个类似的阵列

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

所以整个事情一定是这样的:

preload(
<?php
    $imgs = array_slice($imgs, 0, 6);
    echo implode(',', $imgs);
?>
)

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

$string = rtrim($string, ",");

我可以建议一种稍微不同的方法来解决您的问题吗?每当您想将数据传递给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()调用,以确保您传递的是一个数字索引数组,而不是一个关联数组,该数组会产生对象文字{ ... },而不是数组文字[ ... ]

我还将URL构建转移到了JavaScript,因为我看不出有什么理由将其保留在PHP中。如果您需要在PHP中使用它,并且希望避免"手动"循环,请查看array_map()

还请注意,我正在通过encodeURIComponent()运行您的URL片段,以正确地转义您传递的内容。

关于安全性的注意事项:如果/upload/image.php的脚本接受任意URL(和或"本地文件资源"(,请考虑白名单列出允许的域和路径。

您可以使用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 ",";
        }
    }
?>