воскресенье, 6 ноября 2016 г.

Новый класс WP_List_Util в WordPress 4.7

В WordPress есть удобные функции для работы с массивом объектов или массивов. Создадим массив, работа с которым будет рассмотрена далее:

$array = array (
    array ( 'order' => 5, 'title' => 'five' ),
    array ( 'order' => 3, 'title' => 'three' ),
    array ( 'order' => 1, 'title' => 'two' ),
    array ( 'order' => 1, 'title' => 'one' ),
    array ( 'order' => 4, 'title' => 'four' ),
);


wp_list_filter позволяет фильтровать массив на основе набора пар ключ => значение
Аргументы:
  1. фильтруемый массив
  2. массив условий в форме пар ключ => значение
  3. оператор: AND (по умолчанию), OR, NOT
// ключ 'title' равен 'four'
$result = wp_list_filter( $array, array( 'title' => 'four' ) );

array (
    array ( 'order' => 4, 'title' => 'four' ),
);

// ключ 'order' не равен 1
 $result = wp_list_filter( $array, array( 'order' => 1 ), 'NOT' );

array (
    array ( 'order' => 5, 'title' => 'five' ),
    array ( 'order' => 3, 'title' => 'three' ),
    array ( 'order' => 4, 'title' => 'four' ),
);


wp_list_pluck позволяет:
  • взять определенное свойство из каждого объекта, находящегося в массиве
  • взять определенный элемент из каждого массива, находящегося а массиве

$result = wp_list_pluck( $array, 'title' );

array ( 'five', 'three', 'two', 'one', 'four' );


wp_filter_object_list позволяет применить wp_list_filter, затем wp_list_pluck


в WordPress 4.7 было добавлена новая функция wp_list_sort, которая позволяет сортировать массив:
  • массивов, по ключу из этих массивов
  • объектов, по свойству из этих объектов

// сортировка по ключу 'order'
$result = wp_list_sort( $array, 'order', 'ASC');

array (
    array ( 'order' => 1, 'title' => 'two' ),
    array ( 'order' => 1, 'title' => 'one' ),
    array ( 'order' => 3, 'title' => 'three' ),
    array ( 'order' => 4, 'title' => 'four' ),
    array ( 'order' => 5, 'title' => 'five' ),
);

// сортировка по ключу 'order', затем по ключу 'title'.
$result = wp_list_sort( $array, array( 'order' => 'ASC', 'title' => 'ASC' ) );

array (
    array ( 'order' => 1, 'title' => 'one' ),
    array ( 'order' => 1, 'title' => 'two' ),
    array ( 'order' => 3, 'title' => 'three' ),
    array ( 'order' => 4, 'title' => 'four' ),
    array ( 'order' => 5, 'title' => 'five' ),
);


В WordPress 4.7 также появился новый класс WP_List_Util, позволяющий применять рассмотренные функции в определенной последовательности. Например, функция wp_filter_object_list может делать следующее (при передаче соответствующих аргументов):

// исключить элементы с ключом 'order' равным 1, затем выбрать значения по ключу 'title'
$util = new WP_List_Util( $array );
$util->filter( array( 'order' => 1 ), 'NOT' );
$util->pluck( 'title' );
$result = $util->get_output();

array ( 'five', 'three', 'four' );



Комментариев нет:

Отправить комментарий