我正在尝试从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>
感谢。
答案 0 :(得分:0)
PHP没有隐含地保护你的代码,所以你必须做一些额外的工作来确保你真的能够做正确的事情:
TypeError: no implicit conversion of Hash into String
如果没有任何内容可以爆炸, explode
可能会返回一个空数组。因此,如果不存在,您需要检查并采取适当的措施。