Make WordPress Core

Ticket #44212: 44212.2.patch

File 44212.2.patch, 3.3 KB (added by keesiemeijer, 5 years ago)

Add new function wp_parse_list()

  • src/wp-includes/functions.php

     
    36523652 * @return array Sanitized array of IDs.
    36533653 */
    36543654function wp_parse_id_list( $list ) {
    3655         if ( ! is_array( $list ) ) {
    3656                 $list = preg_split( '/[\s,]+/', $list );
    3657         }
    3658 
    3659         return array_unique( array_map( 'absint', $list ) );
     3655        return array_unique( array_map( 'absint', wp_parse_list( $list ) ) );
    36603656}
    36613657
    36623658/**
     
    36683664 * @return array Sanitized array of slugs.
    36693665 */
    36703666function wp_parse_slug_list( $list ) {
     3667        $list = wp_parse_list( $list );
     3668        foreach ( $list as $key => $value ) {
     3669                $list[ $key ] = sanitize_title( $value );
     3670        }
     3671
     3672        return array_unique( $list );
     3673}
     3674
     3675/**
     3676 * Clean up an array, comma- or space-separated list.
     3677 *
     3678 * Duplicate values are filtered out by default.
     3679 * Use format 'filter_false' to also filter out all the values that equal to false.
     3680 * For example: '', '0', 0, false, null, array()
     3681 *
     3682 * @since X.X.X
     3683 *
     3684 * @param array|string $list   List.
     3685 * @param string       $format List format. Accepts 'raw' or 'filter_false'.
     3686 * @return array Parsed list.
     3687 */
     3688function wp_parse_list( $list, $format = '' ) {
    36713689        if ( ! is_array( $list ) ) {
    3672                 $list = preg_split( '/[\s,]+/', $list );
     3690                $list = preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
    36733691        }
    36743692
    3675         foreach ( $list as $key => $value ) {
    3676                 $list[ $key ] = sanitize_title( $value );
     3693        if ( 'raw' === $format ) {
     3694                return $list;
     3695        } elseif ( 'filter_false' === $format ) {
     3696                $list = array_filter( $list );
    36773697        }
    36783698
    36793699        return array_unique( $list );
  • tests/phpunit/tests/functions.php

     
    550550        }
    551551
    552552        /**
     553         * @dataProvider data_wp_parse_list_formatted_with_filter_false
     554         */
     555        function test_wp_parse_list_formatted_with_filter_false( $expected, $actual ) {
     556                $this->assertSame( $expected, array_values( wp_parse_list( $actual, 'filter_false' ) ) );
     557        }
     558
     559        function data_wp_parse_list_formatted_with_filter_false() {
     560                return array(
     561                        array( array(), array( '', '0', 0, false, null, array() ) ),
     562                        array( array( '1', '2', '3', '4' ), ' 1,,2 3  ,0 4 2 ' ),
     563                );
     564        }
     565
     566        /**
    553567         * @dataProvider data_wp_parse_id_list
    554568         */
    555569        function test_wp_parse_id_list( $expected, $actual ) {
     
    559573        function data_wp_parse_id_list() {
    560574                return array(
    561575                        array( array( 1, 2, 3, 4 ), '1,2,3,4' ),
     576                        array( array( 1, 2, 3, 4 ), ' 1,2,3,4' ),
    562577                        array( array( 1, 2, 3, 4 ), '1, 2,,3,4' ),
    563578                        array( array( 1, 2, 3, 4 ), '1,2,2,3,4' ),
    564579                        array( array( 1, 2, 3, 4 ), array( '1', '2', '3', '4', '3' ) ),
     
    578593        function data_wp_parse_slug_list() {
    579594                return array(
    580595                        array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple,banana,carrot,dog' ),
     596                        array( array( 'apple', 'banana', 'carrot', 'dog' ), ' apple,banana,carrot,dog' ),
    581597                        array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple, banana,,carrot,dog' ),
    582598                        array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple banana carrot dog' ),
    583599                        array( array( 'apple', 'banana-carrot', 'd-o-g' ), array( 'apple ', 'banana carrot', 'd o g' ) ),