WP_List_Util::filter( array $args = array(), string $operator = ‘AND’ ): array

Filters the list, based on a set of key => value arguments.

Description

Retrieves the objects from the list that match the given arguments.
Key represents property name, and value represents property value.

If an object has more properties than those specified in arguments, that will not disqualify it. When using the ‘AND’ operator, any missing properties will disqualify it.

Parameters

$argsarrayoptional
An array of key => value arguments to match against each object.

Default:array()

$operatorstringoptional
The logical operation to perform. 'AND' means all elements from the array must match. 'OR' means only one element needs to match. 'NOT' means no elements may match. Default 'AND'.

Default:'AND'

Return

array Array of found values.

Source

public function filter( $args = array(), $operator = 'AND' ) {
	if ( empty( $args ) ) {
		return $this->output;
	}

	$operator = strtoupper( $operator );

	if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) {
		$this->output = array();
		return $this->output;
	}

	$count    = count( $args );
	$filtered = array();

	foreach ( $this->output as $key => $obj ) {
		$matched = 0;

		foreach ( $args as $m_key => $m_value ) {
			if ( is_array( $obj ) ) {
				// Treat object as an array.
				if ( array_key_exists( $m_key, $obj ) && ( $m_value == $obj[ $m_key ] ) ) {
					++$matched;
				}
			} elseif ( is_object( $obj ) ) {
				// Treat object as an object.
				if ( isset( $obj->{$m_key} ) && ( $m_value == $obj->{$m_key} ) ) {
					++$matched;
				}
			}
		}

		if ( ( 'AND' === $operator && $matched === $count )
			|| ( 'OR' === $operator && $matched > 0 )
			|| ( 'NOT' === $operator && 0 === $matched )
		) {
			$filtered[ $key ] = $obj;
		}
	}

	$this->output = $filtered;

	return $this->output;
}

Changelog

VersionDescription
4.7.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.