У меня есть массив под названием $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] =>
)
Из вышеприведенного вывода я не понимаю, почему следующий массив идет с час значения даже соответствующих ключей массива ** (описание, заголовок, изображение, URL) ** отсутствуют в массиве $request_data
,
В идеале в массиве ниже [link] все ключи должны содержать null
ценности:
[link] => Array
(
[description] => h
[image] => h
[title] => h
[url] => h
)
Пожалуйста, объясните мне, откуда и как это ‘час’ письмо приходит и устанавливается в качестве значения для каждого ключа выше внутреннего массива. Это было бы очень полезно для меня.
Пожалуйста, направьте меня в этом отношении. Куда я иду не так? Какие изменения мне нужно внести в мой код?
Благодарю. Жду ваших драгоценных ответов.
Ключ description
не существует в $request_data['link']
, Это оценивает к 0 и поэтому это в основном говорит $request_data['link'][0]
,
Вы должны увидеть предупреждение (если у вас отображаются ошибки):
Warning: Illegal string offset 'description' in - on line X
Устанавливает значение h
потому что это первая буква (или символ 0) значения http://www.yahoo.co.in
,
фактически $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;
}
Если вы знаете, какие возможные значения может принимать ваш массив (при создании $ 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
и заполняется позже (или нет).
В идеале, в зависимости от вашего варианта использования, я бы даже создал объект, чтобы было проще обрабатывать более сложные случаи, но это полностью зависит от вашего использования.