WP_List_Util::pluck()publicWP 4.7.0

Plucks a certain field out of each element in the input array.

This has the same functionality and prototype of array_column() (PHP 5.5) but also supports objects.

Метод класса: WP_List_Util{}

Хуков нет.

Возвращает

Массив. Array of found values. If $index_key is set, an array of found values with keys corresponding to $index_key. If $index_key is null, array keys from the original $list will be preserved in the results.

Использование

$WP_List_Util = new WP_List_Util();
$WP_List_Util->pluck( $field, $index_key );
$field(int|строка) (обязательный)
Field to fetch from the object or array.
$index_key(int|строка)
Field from the element to use as keys for the new array.
По умолчанию: null

Список изменений

С версии 4.7.0 Введена.

Код WP_List_Util::pluck() WP 6.5.2

public function pluck( $field, $index_key = null ) {
	$newlist = array();

	if ( ! $index_key ) {
		/*
		 * This is simple. Could at some point wrap array_column()
		 * if we knew we had an array of arrays.
		 */
		foreach ( $this->output as $key => $value ) {
			if ( is_object( $value ) ) {
				$newlist[ $key ] = $value->$field;
			} elseif ( is_array( $value ) ) {
				$newlist[ $key ] = $value[ $field ];
			} else {
				_doing_it_wrong(
					__METHOD__,
					__( 'Values for the input array must be either objects or arrays.' ),
					'6.2.0'
				);
			}
		}

		$this->output = $newlist;

		return $this->output;
	}

	/*
	 * When index_key is not set for a particular item, push the value
	 * to the end of the stack. This is how array_column() behaves.
	 */
	foreach ( $this->output as $value ) {
		if ( is_object( $value ) ) {
			if ( isset( $value->$index_key ) ) {
				$newlist[ $value->$index_key ] = $value->$field;
			} else {
				$newlist[] = $value->$field;
			}
		} elseif ( is_array( $value ) ) {
			if ( isset( $value[ $index_key ] ) ) {
				$newlist[ $value[ $index_key ] ] = $value[ $field ];
			} else {
				$newlist[] = $value[ $field ];
			}
		} else {
			_doing_it_wrong(
				__METHOD__,
				__( 'Values for the input array must be either objects or arrays.' ),
				'6.2.0'
			);
		}
	}

	$this->output = $newlist;

	return $this->output;
}