通过循环键值数组创建连接字符串[重复]

问题描述 投票:0回答:4

我试图在 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;

我用谷歌搜索了解决方案,但没有找到任何解决方案。

php arrays variables loops foreach
4个回答
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;

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
投票

第一个问题

  • 需要在循环外定义$source变量。

第二期

  • 与首先非常相似,您需要在循环外部定义变量,然后连接 循环内。您正在循环内执行操作,这就是它被覆盖并获取最后一个值的原因。

    $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;
    

1
投票

第一条消息

undefined variable $source
表示名为
$source
的变量尚未定义。该代码无需定义变量源即可工作,但这不是正确的方法;)

虽然 PHP 不需要变量声明,但它确实推荐 它是为了避免一些安全漏洞或错误 会忘记给稍后将使用的变量赋值 剧本。 PHP 在未声明变量的情况下会做什么是个问题 一个非常低级的错误,E_NOTICE,一个甚至没有被报告的错误 默认,但手册建议在开发过程中允许。

(PHP:“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”)

至于你的第二个问题..你正在重新定义

$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

© www.soinside.com 2019 - 2024. All rights reserved.