TechBlogSD - Все для WordPress и WEB разработки
WEB и WordPress инструкции, новости, обзоры тем и плагинов

Извлекаем глубоко вложенные данные в PHP

726

Когда в последний раз вам приходилось извлекать некоторые глубоко вложенные данные в PHP, и в итоге вы писали код, который выглядел примерно так?

$grandchild = isset( $data['parent'], $data['parent']['child'], $data['parent']['child']['grandchild'] ) ? $data['parent']['child']['grandchild'] : null;

В Laravel есть функция, которая позволяет вам получать данные следующим образом: array_get()

$grandchild = array_get( $data, 'parent.child.grandchild' );

Это здорово, но я решил использовать подход Laravel для вдохновения и улучшить его. Я написал аналогичную функцию, но решил расширить ее, чтобы она извлекала не только глубоко вложенные данные из массива, но и из объекта.

Результатом является надежная служебная функция, которая позволяет легко извлекать глубоко вложенные данные из неоднородной многомерной коллекции с использованием точечной нотации :

/** * Получить значение из объекта или массива. Позволяет возможность получить вложенное значение из многомерной коллекция с использованием точечной нотации. * * @param array|object $data * @param string $key * @param mixed $default * @return mixed */ function get_value( $data, $key, $default = null ) { $value = $default; if ( is_array( $data ) && array_key_exists( $key, $data ) ) { $value = $data[$key]; } else if ( is_object( $data ) && property_exists( $data, $key ) ) { $value = $data->$key; } else { $segments = explode( '.', $key ); foreach ( $segments as $segment ) { if ( is_array( $data ) && array_key_exists( $segment, $data ) ) { $value = $data = $data[$segment]; } else if ( is_object( $data ) && property_exists( $data, $segment ) ) { $value = $data = $data->$segment; } else { $value = $default; break; } } } return $value; }

Если мы переписываем нашу первоначальную загадку кода с использованием этой функции, она выглядит почти идентично Laravel : array_get()

$grandchild = get_value( $data, 'parent.child.grandchild' );

Однако реальная выгода приходит, когда нам нужен доступ к структуре данных, которая может быть смесью массивов и объектов:

$data['parent']->child['grandchild'];

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

Статья была переведена для блога TechBlog.SDStudio.top

Источник: wpscholar.com

Источник записи:

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