Foreach带有变量函数的Array中的变量列表返回Undefined offset:Error

时间:2016-12-14 07:24:17

标签: php function undefined

更新: 如果我从第67行和第68行删除$1,则所有未确认的偏移2错误都将消失

只有一个未定义的偏移1错误,即没有x返回的var为" custom"

<?php list($w, $h, $1) = OX_Tools::explode_format($sformat); // Line 67?>
    <option<?php echo ($adformat == $sformat ? ' selected="selected"' : ''); ?> value="<?php echo $sformat; ?>"> <?php printf($formats['formats'][$sformat], $w, $h, $1); ?></option>

// Changed to This

<?php list($w, $h) = OX_Tools::explode_format($sformat); // Line 67?>
    <option<?php echo ($adformat == $sformat ? ' selected="selected"' : ''); ?> value="<?php echo $sformat; ?>"> <?php printf($formats['formats'][$sformat], $w, $h); ?></option>

需要一些帮助 我得到未定义的偏移:当值是一个单词&#34; custom&#34; 我得到Undefined offset:2,当值是由函数OX_Tools::explode_format执行的x分隔的数字时

我已经在这个网站和其他网站上阅读过几十个帖子,并尝试了几种解决方案,但在我的情况下没有运气。此时不确定还有什么可以尝试的。任何想法将不胜感激。谢谢

$sformatexplode_format的结果

728x90的 468x60的

160x600的 120x600的

300x250的 为125x125

定制

$sformats

的结果
print_r($sformats);
Array
(
    [0] => 728x90
    [1] => 468x60
)
Array
(
    [0] => 728x90
    [1] => 468x60
)
Array
(
    [0] => 160x600
    [1] => 120x600
)
Array
(
    [0] => 160x600
    [1] => 120x600
)
Array
(
    [0] => 300x250
    [1] => 125x125
)

Array
(
    [0] => 300x250
    [1] => 125x125
)
Array
(
    [0] => custom
)

$formats

的结果
print_r($formats);
Array
(
    [data] => Array
        (
            [all] => Array
                (
                    [horizontal] => Array
                        (
                            [0] => 728x90
                            [1] => 468x60
                        )

                    [vertical] => Array
                        (
                            [0] => 160x600
                            [1] => 120x600
                        )

                    [square] => Array
                        (
                            [0] => 300x250
                            [1] => 125x125
                        )

                    [custom] => Array
                        (
                            [0] => custom
                        )

                )

        )

    [types] => Array
        (
            [text] => Text ads
            [image] => Image ads
            [ref_text] => Text referrals
            [ref_image] => Image referrals
            [textimage] => Text and image ads
            [link] => Ad links
            [video] => Video ads
            [all] => All ad types
        )

    [sections] => Array
        (
            [horizontal] => Horizontal
            [vertical] => Vertical
            [square] => Square
            [other] => Other ad formats
            [custom] => Custom width and height
        )

    [formats] => Array
        (
            [728x90] => %1$s x %2$s Leaderboard
            [468x60] => %1$s x %2$s Banner
            [160x600] => %1$s x %2$s Wide Skyscraper
            [120x600] => %1$s x %2$s Skyscraper
            [300x250] => %1$s x %2$s Medium Rectangle
            [125x125] => %1$s x %2$s Button
            [custom] => Custom width and height
        )

)

错误在第67行,这里是代码

<?php foreach ($sformats as $sformat) : ?>
<?php list($w, $h, $l) = OX_Tools::explode_format($sformat); //Line 67?> 
            <option<?php echo ($adformat == $sformat ? ' selected="selected"' : ''); ?> value="<?php echo $sformat; ?>"> <?php printf($formats['formats'][$sformat], $w, $h, $l); ?></option>
<?php endforeach; ?>

这是函数OX_Tools::explode_format

<?php
static function explode_format($format)
{
    $vars = preg_split("/[x#]+/", $format);
    return $vars;
}
?>

1 个答案:

答案 0 :(得分:0)

这就是我提出的解决方案。对不起有些人不喜欢这个问题。也许是因为我没有提供一个可执行的例子或类似的问题,过去曾被问过,那与我的完全一样。

我已经在Stack上找到了很多解决问题的方法,并意识到我没有回馈过,所以我打算花更多的时间在网站上并尝试贡献。

够了!我在等着看是否有人会说你错过了这个something我正在查看列表中的$1变量并试图找出原因!这个项目中有38个文件,不包括javascript和语言文件,它必须存在于以前的作者中删除的内容。

当我从第67行和第68行的$1中删除list($w, $h, $l)时,除了一个错误之外,所有错误和代码都按照预期执行。

正如我在更新中所述,这给我留下了一个未定义的偏移错误,并且必须与不匹配preg_split()函数可匹配的变量相关。

我尝试的是if $sformat != ‘custom’它会使用preg_split()并清除所有错误。我测试了插件的其余部分,没有错误。大!由于用户可以创建自己的格式命名,因此任何他们想要匹配custom的东西都不好。我使用preg_match()函数来消除任何不符合要求的变量。

这是原始的第67行

<?php list($w, $h, $l) = OX_Tools::explode_format($sformat); ?>

我把它改成了

<?php if (!preg_match("/[0-9]x[0-9]/", $sformat)) {$sformat = $sformat;}else{list($w, $h) = OX_Tools::explode_format($sformat); } ?>

如果您发现我的解决方案存在问题,请发表评论

感谢@MarcosPérezGude发表评论,但是如果它explode("x", $var)那么容易,我就不会问人们不喜欢的问题,也不会受到启发参加Stackoverflow社区的更多信息

每天都住,就像你最后一次......有一天会是!