Make WordPress Core


Ignore:
Timestamp:
10/21/2016 05:00:29 PM (8 years ago)
Author:
ocean90
Message:

Revert [38859] due to an incomplete implementation.

See https://core.trac.wordpress.org/ticket/37128#comment:27.
See #37128.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/functions.php

    r38859 r38863  
    34903490 *
    34913491 * @since 3.0.0
    3492  * @since 4.7.0 Uses WP_List_Util class.
    34933492 *
    34943493 * @param array       $list     An array of objects to filter
     
    35043503 */
    35053504function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
    3506     if ( ! is_array( $list ) ) {
     3505    if ( ! is_array( $list ) )
    35073506        return array();
    3508     }
    3509 
    3510     $util = new WP_List_Util( $list );
    3511 
    3512     $util->filter( $args, $operator );
    3513 
    3514     if ( $field ) {
    3515         $util->pluck( $field );
    3516     }
    3517 
    3518     return $util->get_output();
     3507
     3508    $list = wp_list_filter( $list, $args, $operator );
     3509
     3510    if ( $field )
     3511        $list = wp_list_pluck( $list, $field );
     3512
     3513    return $list;
    35193514}
    35203515
     
    35233518 *
    35243519 * @since 3.1.0
    3525  * @since 4.7.0 Uses WP_List_Util class.
    35263520 *
    35273521 * @param array  $list     An array of objects to filter.
     
    35353529 */
    35363530function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
    3537     if ( ! is_array( $list ) ) {
     3531    if ( ! is_array( $list ) )
    35383532        return array();
    3539     }
    3540 
    3541     $util = new WP_List_Util( $list );
    3542     return $util->filter( $args, $operator );
     3533
     3534    if ( empty( $args ) )
     3535        return $list;
     3536
     3537    $operator = strtoupper( $operator );
     3538    $count = count( $args );
     3539    $filtered = array();
     3540
     3541    foreach ( $list as $key => $obj ) {
     3542        $to_match = (array) $obj;
     3543
     3544        $matched = 0;
     3545        foreach ( $args as $m_key => $m_value ) {
     3546            if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] )
     3547                $matched++;
     3548        }
     3549
     3550        if ( ( 'AND' == $operator && $matched == $count )
     3551          || ( 'OR' == $operator && $matched > 0 )
     3552          || ( 'NOT' == $operator && 0 == $matched ) ) {
     3553            $filtered[$key] = $obj;
     3554        }
     3555    }
     3556
     3557    return $filtered;
    35433558}
    35443559
     
    35513566 * @since 3.1.0
    35523567 * @since 4.0.0 $index_key parameter added.
    3553  * @since 4.7.0 Uses WP_List_Util class.
    35543568 *
    35553569 * @param array      $list      List of objects or arrays
     
    35623576 */
    35633577function wp_list_pluck( $list, $field, $index_key = null ) {
    3564     $util = new WP_List_Util( $list );
    3565     return $util->pluck( $field, $index_key );
    3566 }
    3567 
    3568 /**
    3569  * Sorts a list of objects, based on one or more orderby arguments.
    3570  *
    3571  * @since 4.7.0
    3572  *
    3573  * @param array        $list    An array of objects to filter.
    3574  * @param string|array $orderby Optional. Either the field name to order by or an array
    3575  *                              of multiple orderby fields as $orderby => $order.
    3576  * @param string       $order   Optional. Either 'ASC' or 'DESC'. Only used if $orderby
    3577  *                              is a string.
    3578  * @return array The sorted array.
    3579  */
    3580 function wp_list_sort( $list, $orderby = array(), $order = 'ASC' ) {
    3581     if ( ! is_array( $list ) ) {
    3582         return array();
    3583     }
    3584 
    3585     $util = new WP_List_Util( $list );
    3586     return $util->sort( $orderby, $order );
     3578    if ( ! $index_key ) {
     3579        /*
     3580         * This is simple. Could at some point wrap array_column()
     3581         * if we knew we had an array of arrays.
     3582         */
     3583        foreach ( $list as $key => $value ) {
     3584            if ( is_object( $value ) ) {
     3585                $list[ $key ] = $value->$field;
     3586            } else {
     3587                $list[ $key ] = $value[ $field ];
     3588            }
     3589        }
     3590        return $list;
     3591    }
     3592
     3593    /*
     3594     * When index_key is not set for a particular item, push the value
     3595     * to the end of the stack. This is how array_column() behaves.
     3596     */
     3597    $newlist = array();
     3598    foreach ( $list as $value ) {
     3599        if ( is_object( $value ) ) {
     3600            if ( isset( $value->$index_key ) ) {
     3601                $newlist[ $value->$index_key ] = $value->$field;
     3602            } else {
     3603                $newlist[] = $value->$field;
     3604            }
     3605        } else {
     3606            if ( isset( $value[ $index_key ] ) ) {
     3607                $newlist[ $value[ $index_key ] ] = $value[ $field ];
     3608            } else {
     3609                $newlist[] = $value[ $field ];
     3610            }
     3611        }
     3612    }
     3613
     3614    return $newlist;
    35873615}
    35883616
Note: See TracChangeset for help on using the changeset viewer.