我试图在foreach循环中使用变量但是我得到了奇怪的结果。第一个foreach循环工作正常,但给出了一个未定义变量的通知,在第二个版本中没有通知,但它只返回数组中的最后一项。
$formats = array(
'application/x-mpegurl' => 'hls',
'video/webm' => 'webm',
'video/mp4' => 'mp4',
'video/ogg' => 'ogg',
'video/flash' => 'flash',
);
// Works perfectly but there a undefined variable $source
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source;
// Returns only the last item in the variable but there is no undefined variable
foreach( $formats as $format => $src ){
$source2 = '';
if ( !empty( $src ) ) {
$source2 .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source2;
我用google搜索解决方案还没找到。
答案 0 :(得分:2)
在循环开始之前定义$source
和d $source1
。
$source = "";
// loop starts here
完整代码:
$source = "";
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source;
$source2 = '';
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source2 .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source2;
答案 1 :(得分:2)
在这两种情况下,变量都需要在foreach循环之外定义:
$formats = array(
'application/x-mpegurl' => 'hls',
'video/webm' => 'webm',
'video/mp4' => 'mp4',
'video/ogg' => 'ogg',
'video/flash' => 'flash',
);
// Works perfectly but there a undefined variable $source
$source = '';
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source;
// Returns only the last item in the variable but there is no undefined variable
$source2 = '';
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source2 .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source2;
答案 2 :(得分:2)
第一个问题
第二期
非常类似于第一个你需要在循环外定义变量然后连接 在循环内。你正在循环内部这就是为什么它被覆盖并获得最后一个值。
$source = '';
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source;
$source2 = '';
// Returns only the last item in the variable but there is no undefined variable
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source2 .= '<source type="' . $format . '" src="' . $src . '">';
}
}
echo $source2;
答案 3 :(得分:1)
第一条消息undefined variable $source
表示尚未定义名为$source
的变量。代码将在不定义变量源的情况下工作,但这不是可行的方法;)
虽然PHP不需要变量声明,但它确实推荐 它是为了避免一些安全漏洞或漏洞 会忘记为稍后将使用的变量赋值 剧本。 PHP在未声明变量的情况下所做的是问题 一个非常低级别的错误,E_NOTICE,一个甚至没有报告的错误 默认,但手册建议在开发期间允许。
(PHP: "Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset")
至于你的第二个问题..你正在重新定义循环的每次迭代$source2
。只需移动$source2
,以便在foreach
上方的行上定义。
// Returns only the last item in the variable but there is no undefined variable
$source2 = ''; // MOVED THIS LINE
foreach( $formats as $format => $src ){
if ( !empty( $src ) ) {
$source2 .= '<source type="' . $format . '" src="' . $src . '">';
}
}
阅读PHP手册中有关定义变量的更多信息:http://www.php.net/manual/en/language.variables.basics.php