Почему я получаю странный массив из другого массива в следующем сценарии?

У меня есть массив под названием $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
)

Пожалуйста, объясните мне, откуда и как это ‘час’ письмо приходит и устанавливается в качестве значения для каждого ключа выше внутреннего массива. Это было бы очень полезно для меня.

Пожалуйста, направьте меня в этом отношении. Куда я иду не так? Какие изменения мне нужно внести в мой код?

Благодарю. Жду ваших драгоценных ответов.

1

Решение

Ключ 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;
}
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 и заполняется позже (или нет).

В идеале, в зависимости от вашего варианта использования, я бы даже создал объект, чтобы было проще обрабатывать более сложные случаи, но это полностью зависит от вашего использования.

0

По вопросам рекламы [email protected]