0

这会让我看起来很傻,但是我正在尝试在一些 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 "}";
    }."]
});";

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

4

8 回答 8

2

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

而是添加到循环内的字符串中。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 .= "]});";
于 2013-07-16T15:13:15.627 回答
2

你不能在字符串赋值中使用 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 数据,因为元素之间缺少 , 。

更好的方法可能是这样做(php 5.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)."});";
于 2013-07-16T15:13:57.943 回答
1

这里的一切都是错误的。您不能将 $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 中使用,它确实需要转义等等。

于 2013-07-16T15:15:13.957 回答
1

这是 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]});";

请注意,这是未经测试的,您可能需要在方括号和花括号之间进行一些调整,但它应该会引导您走上一条新的、更好的、更干净的道路。

于 2013-07-16T15:18:09.027 回答
0

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

$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
});';
于 2013-07-16T15:30:37.753 回答
0

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

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

.=附加你的字符串。


此外,您似乎正在尝试创建一个 json 字符串而不是直接 json_encode 您的 $myVideos 数组?

于 2013-07-16T15:17:10.520 回答
0

应该能够通过将 foreach 拉到自己的语句中来做到这一点,如下所示:

$html = "jQuery(document).ready(function($) { playlist: [";

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

$html = $html."]});";
于 2013-07-16T15:18:43.683 回答
0

在这一切之后不要忘记回显 $html ......

    $html = "jQuery(document).ready(function($) { 
        playlist: [";

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

    $html .= "]});";
    echo $html;
于 2013-07-16T15:22:33.807 回答