我收到此PHP警告:
Message: Undefined index: homePageLink
索引就在那里。我可以在函数中打印它,即使它进入视图,如果我print_f
我能看到它。
function logo($params) {
$widgetData['title'] = $params['title'] == "" ? ROOT_DOMAIN : $params['title'];
$widgetData['homePageLink'] = $params['homePageLink'] ? "http://" . ROOT_DOMAIN : false;
return $widgetData;
}
如果我在徽标功能中打印$params
,我会得到:
$params ([homePageLink] => 1 [title] => My Title)
如果我print_f
视图中的数组,我会完全一样。
我有很多这些功能做同样的事情,这是我第一次有这个。我已经尝试将“homePageLink”条目更改为String而不是布尔值,但它没有区别。
我从JSON文件中获取数据:
{
"logo": {
"homePageLink" : true,
"title": "My Title"
}
我疯了吗?
更新:我忘了说我已经尝试过了:
$widgetArray = array();
答案 0 :(得分:0)
你能试试这个:来修复这个功能,我使用了php empty()功能
function logo($params) {
$widgetData['title'] = (!empty($params['title']) ? ROOT_DOMAIN : $params['title']);
$widgetData['homePageLink'] = (!empty($params['homePageLink']) ? "http://" . ROOT_DOMAIN : false);
return $widgetData;
}
我测试了这样:
define('ROOT_DOMAIN', 'test.com');
var_dump(logo(array(
'title' => 'Hello World',
'homePageLink' => 1
)));
输出:
答案 1 :(得分:0)
最初使用空白值设置变量,或者将数组设置为: -
$widgetData = array();
您也可以使用empty()
或isset()
来避免通知
$widgetData['homePageLink'] = (!empty($params['homePageLink']) ? "http://" . ROOT_DOMAIN : false);
或
$widgetData['homePageLink'] = ($params['homePageLink'] == true) ? "http://" . ROOT_DOMAIN : false);
答案 2 :(得分:0)
你可以试试这个
function logo($params) {
$widgetData = array();
$widgetData['title'] = $params['title'] == "" ? ROOT_DOMAIN : $params['title'];
$widgetData['homePageLink'] = empty($params['homePageLink']) ? "http://" . ROOT_DOMAIN : false;
return $widgetData;
}
答案 3 :(得分:0)
最后更新:
我从你的评论中推断出拉克什的答案(当我这样做时,它工作得很好:if (isset($params['homePageLink'])) echo "IT IS SET TO: " . $params['homePageLink'];
我得到了#34;它被设置为:1" ),你是,实际上没有检查是否设置了给定的键
就像我在这篇文章中无数次说的那样(在评论中,和在这个答案中): 添加isset
检查,只要你访问{{1}中的任何一个键} array 。
不要只检查此$params
商家一次,您必须在每次使用时检查每个密钥,或者使用默认值填写缺少的密钥:
isset
现在,您确定所需的密钥确实已设置。
更新
所以,事实证明你试图预先声明fucntion logo(array $params)
{
if (!isset($params['homePageLink']))
$params['homePageLink'] = false;//set to false as default
if (!isset($params['title']))
$params['title'] = false;
}
数组,但无济于事。好吧,快速回顾一下要检查的事情,仍然是:
$widgetData
函数添加类型提示,以确保logo
始终为数组。$params
个检查添加到您尝试使用的isset
数组中的所有键(如下所示)$params
的密钥,确保它们不是二进制字符串,可能包含不可见的$params
字符(例如,在投射objects to an array的实例时)通知可能不会来自您访问\0
,而是您尝试分配给$params['homePageLink']
变量。
看到你没有明确地将后者声明为数组,你应该得到通知。尝试将$widgetData
函数更改为以下内容:
logo
当然,如果您所做的只是构造function logo(array $params)
{//use type-hints, to ensure $params is an array
$widgetData = array(
'title' => isset($params['title']) && $params['title'] ? $params['title'] : ROOT_DOMAIN,
'homePageLink' => isset($params['homePageLink']) && $params['homePageLink'] ? 'http://'.ROOT_DOMAIN : false
);
//do stuff
return $widgetData;
}
数组,那么您甚至无需将其分配给局部变量,只需编写
$widgetData
如果return array(
'title' => 'same code as above'
);
中的任何值在任何给定点都可能是$params
,那么null
和empty
都不会有多大用处(isset
如果分配了数组键isset
,则评估为false
,empty
评估为true
。因此,当值为null时,键确实存在,即使这两个检查都会告诉您它没有。
在这种情况下,只有一件事:
null