Как переиндексировать массив в PHP

3884

Как переиндексировать массив в PHP

Время от времени, необходимо переиндексировать массив данных в PHP. На примере сейчас мы наглядно покажем как это сделать, фрагмент кода:

<?php
/**
 * Index a collection of arrays/objects by a specific key/property.
 *
 * @param string $index
 * @param array $data
 * @return array
 */
function index_by( $index, array $data ) {
    $indexed_data = array();
    foreach( $data as $item ) {
        if( is_array( $item ) && array_key_exists( $index, $item ) ) {
            $indexed_data[$item[$index]] = $item;
        } else if( is_object( $item ) && property_exists( $item, $index ) ) {
            $indexed_data[$item->$index] = $item;
        }
    }
    return $indexed_data;
}

Эта служебная функция может быть полезна для любого PHP-проекта. Это удобно, когда вы хотите взять индексированный массив и преобразовать его в ассоциативный массив.

Например, взять коллекцию постов и проиндексировать их по ID становится очень просто:

$posts = get_posts();
$posts_by_id = index_by( 'ID', $posts );

Эта функция будет одинаково хорошо работать с массивом объектов или массивом массивов.