PHP数组未定义的偏移量,即使代码执行

时间:2016-03-10 18:39:51

标签: php arrays

我正在尝试从REQUEST_URI中提取一些变量:

liquidfinger.com/key1-value1/key2-value2/key3-value3

我想将这些值转换为php关联数组。我的代码如下:

$pState = [];
$stateString = substr($_SERVER['REQUEST_URI'],1);//remove leading slash
if($stateString){
    $statePairs = explode("/",$stateString);
    foreach($statePairs as $statePair){
        $statePairArray = explode("-",$statePair);
        $pState[$statePairArray[0]] = $statePairArray[1];
    }
}

正在正确创建$pState数组,我可以echo所有键和值。但是,我得到error_log

  

未定义的偏移量:1

当没有键值对时,我甚至得到error_log,因此不应该执行IF语句,但这可能是error_log的特征?

好的,回顾一下,代码正在运行,但我收到了错误消息。进一步的测试得出以下结论:

url: www.liquidfinger.com
print_r($pState): Array ( )
[11-Mar-2016 10:01:02 UTC] PHP Notice:  Undefined offset: 1 in /home/adamglynsmith/public_html/index.php on line 20


url: http://www.liquidfinger.com/user-2/tab-browseAll/marker-101
print_r($pState): Array ( [user] => 2 [tab] => browseAll [marker] => 101 )
print_r($statePairArray): Array ( [0] => user [1] => 2 ) Array ( [0] => tab     [1] => browseAll ) Array ( [0] => marker [1] => 101 )
[11-Mar-2016 10:14:41 UTC] PHP Notice:  Undefined offset: 1 in /home/adamglynsmith/public_html/index.php on line 20
[11-Mar-2016 10:14:43 UTC] PHP Notice:  Undefined offset: 1 in /home/adamglynsmith/public_html/index.php on line 20

由于我已经花了足够的时间在上面,因为我最终希望最终得到一个JavaScript数组,所以我通过使用php为JavaScript构造一个字符串来解决 - 或者避免 - 这个问题:

    $stateString = str_replace("/","', ",$stateString);//get rid of slashes
    $stateString = str_replace("-",":'",$stateString);//get rid of dashes
    $stateString .= "'";//add final single quote
    <script>
        jState = {<?php echo $stateString; ?>};
    </script>

感谢。

1 个答案:

答案 0 :(得分:0)

PHP没有隐含地保护你的代码,所以你必须做一些额外的工作来确保你真的能够做正确的事情:

TypeError: no implicit conversion of Hash into String
如果没有任何内容可以爆炸,

explode可能会返回一个空数组。因此,如果不存在,您需要检查并采取适当的措施。