试图在html转义后使用foreach


trying to use foreach after html escaping

这会让我看起来很傻,但我正在尝试在一些HTML之后执行foreach,而不破坏$html = 'my html code';。以下是我正在尝试做的,尽管我收到了foreach错误Parse error: syntax error, unexpected T_FOREACH

这是代码:

$html = "
jQuery(document).ready(function($) { 
    playlist: [".foreach($myVideos as $video) {
        echo "{";
        echo "file: 'http://www.website.com/".$video[filename]."'";
        echo "}";
    }."]
});";

这显然是非常基本的,但我似乎无法摆脱它,我忽略了一些我看不到的东西

不能在字符串赋值中使用foreach,请尝试此操作。注意:为了在播放列表中的各个对象之间获得逗号,并确保值正确转义,我创建了一个视频数组,并使用json_encode生成最终输出。

$html = "jQuery(document).ready(function($) {playlist: ";
$vids = array();
foreach($myVideos as $video) {
        $vids[] = array("file"=>"http://www.website.com/".$video["filename"]);
    }
$html.= json_encode($vids);
$html."});";

但我怀疑这会产生无效的JSON数据,因为元素之间缺少。

更好的方法可能是这样做(php5.3及以上版本)

$videoList = array_map(function($a){ return array("file"=>"http://www.website.com/".$a["filename"]."'"); }, $myVideos);
$html = "jQuery(document).ready(function($) {playlist:".json_encode($videoList)."});";

您正试图在创建字符串的过程中启动一个循环。你不能那样做。

相反,添加到循环中的字符串中。http://php.net/manual/en/language.operators.string.php

$html = "jQuery(document).ready(function($) { 
    playlist: [";
foreach($myVideos as $video) {
        $html .= "{";
        $html .=  "file: 'http://www.website.com/".$video[filename]."'";
        $html .=  "}";
}
$html .= "]});";

这里的一切都错了。您不能将$html与foreach连接起来。如果你想要foreach内部的内容,你应该连接,而不是回声。至少试试这个:

$html = "jQuery(document).ready(function($) { 
    playlist: [";
foreach($myVideos as $video) {
        $html .= "{file: 'http://www.website.com/" . $video[filename]."'}";
    }
$html .= "]
});";

接下来,考虑使用JSON将数组传递给js,它被设计用于js,进行必要的转义等等

这是XY问题的一个例子(基本上,这是一个由对仪器理解不足引起的问题,更多信息请点击此处)。

您希望返回一个json编码的字符串。为什么不试试下面的?

$jsonArr = array()
foreach($myVideos as $video) {
    $jsonArr[] = "http://www.website.com/".$video[filename];
}
$json = json_encode($jsonArr);
$html = "jQuery(document).ready(function($) { playlist: [$json]});";

请注意,这是未经测试的,你可能需要使用方括号和花括号,但它应该会引导你走上一条新的、更好的、更干净的道路。

您仍然没有完成字符串。它期望一个;foreach之前。即使这可以工作,回声部分也会输出到浏览器,而不是你的字符串,你可以这样做:

$html = "
jQuery(document).ready(function($) {playlist: [";
foreach($myVideos as $video) {
    $html .= "{file: 'http://www.website.com/".$video[filename]."'}";
}
$html.= "]});";

.=会在您的字符串中添加yo。


此外,您似乎正在尝试创建一个json字符串,为什么不直接对$myVideos数组进行json_encode?

应该能够通过将foreach拉出到自己的语句中来完成,如下所示:

$html = "jQuery(document).ready(function($) { playlist: [";
foreach($myVideos as $video) 
{
    $html = $html."{ file: 'http://www.website.com/".$video[filename]."' }";
}
$html = $html."]});";

不要忘记在所有这些之后回显$html。。。

    $html = "jQuery(document).ready(function($) { 
        playlist: [";
    foreach($myVideos as $video) {
            $html .= "{";
            $html .=  "file: 'http://www.website.com/".$video[filename]."'";
            $html .=  "}";
    }
    $html .= "]});";
    echo $html;

您应该首先专注于构建正确的数据结构,然后生成周围的代码:

$playList = array();
foreach($myVideos as $video) {
    $playList[] = array(
        'file' => 'http://www.website.com/' . urlencode($video[filename]),
    );
}
$script = 'jQuery(function($) {
    var playList = ' . json_encode($playList) . ';
    // etc
});';