我有一个标题为$request_data
的数组如下:
Array
(
[link] => http://www.yahoo.co.in
[is_activity_feed] => 1
[status_info] => my new yahoo link post
)
然后我根据上面的数组创建一个名为$aVals
的新数组,如下所示:
$aVals['is_activity_feed'] = $request_data['is_activity_feed'];
$aVals['link']['description'] = $request_data['link']['description'];
$aVals['link']['image'] = $request_data['link']['default_image'];
$aVals['link']['title'] = $request_data['link']['title'];
$aVals['link']['url'] = $request_data['link']['link'];
$aVals['status_info'] = $request_data['status_info'];
$aVals["parent_user_id"] = $request_data['group_id'];
$aVals["callback_item_id"] = $request_data['group_id'];
$aVals["callback_module"] = $request_data['callback_module'];
$aVals["group_id"] = $request_data['group_id'];
现在执行语句print_r($aVals);
后,我得到了一些奇怪的数组:
Array
(
[is_activity_feed] => 1
[link] => Array
(
[description] => h
[image] => h
[title] => h
[url] => h
)
[status_info] => my new yahoo link post
[parent_user_id] =>
[callback_item_id] =>
[callback_module] =>
[group_id] =>
)
从上面的输出我不明白为什么下面的数组带有 h 值,即使相应的数组键**(描述,标题,图像,网址)**也不存在数组$request_data
。
理想情况下,在[link]数组下面,所有键都应包含null
个值:
[link] => Array
(
[description] => h
[image] => h
[title] => h
[url] => h
)
请向我解释这个'h'字母的来源和方式,并将其设置为上方内部数组中每个键的值。这对我有很大的帮助。
请在这方面指导我。我哪里错了?我需要对代码进行哪些更改?
感谢。等待你的宝贵回复。
答案 0 :(得分:0)
description
中不存在密钥$request_data['link']
。它的计算结果为0,因此基本上是$request_data['link'][0]
。
您应该看到警告(如果您显示错误):
Warning: Illegal string offset 'description' in - on line X
它将值设置为h
,因为它是值http://www.yahoo.co.in
的第一个字母(或字符0)。
有效$request_data['link'][0] == substr($request_data['link'],0,1)
在尝试访问密钥之前,请尝试检查密钥是否已设置:
if (isset($request_data['link']['description'])) {
$aVals['link']['description'] = $request_data['link']['description'];
} else {
$aVals['link']['description'] = null;
}
答案 1 :(得分:0)
如果您知道阵列可以采用哪些值(构建 $ aVals 时,您似乎知道索引),我会做这样的事情来将数组初始化为某些预期值(基于您的示例键):
$request_data = array_fill_keys(array('link', 'is_activity_feed', 'status_info', 'status_info', 'group_id', 'callback_module'), null);
$request_data['link'] = array();
$request_data['link'] = array_fill_keys(array('description', 'default_image', 'title', 'link'), null);
因此,当您访问任何密钥时,您之前已知道它已初始化为null
并稍后填充(或未填充)。
理想情况下,根据您的用例,我甚至会创建一个对象,以便更容易处理更复杂的情况,但这完全取决于您的使用情况。