0

我从 from 的结果中得到以下var_export( $post_meta );数组$post_meta = get_post_meta( 80 )

array (
  '_edit_last' => 
  array (
    0 => '1',
  ),
  '_edit_lock' => 
  array (
    0 => '1451326767:1',
  ),
  '_sidebar' => 
  array (
    0 => 'Kies Sidebar',
  ),
  '_wp_page_template' => 
  array (
    0 => 'page-pop.php',
  ),
  'custom_sidebar_per_page' => 
  array (
    0 => 'default',
  ),
  '_cat_id' => 
  array (
    0 => '21',
  ),
  '_order_by' => 
  array (
    0 => 'date',
  ),
  '_asc' => 
  array (
    0 => 'DESC',
  ),
  '_post_count' => 
  array (
    0 => '5',
  ),
  '_days' => 
  array (
    0 => '0',
  ),
  '_custom_sidebar_per_page' => 
  array (
    0 => 'default',
  ),
)

现在我需要过滤其中一些值(如果它们存在),以便我可以安全地使用它们。我执行以下操作

$args = [
    '_cat_id' => [
        0 => [
            'filter' => FILTER_VALIDATE_INT,
            'default' => 1
        ] 
    ],         
    '_page_title' => [
        0 => FILTER_SANITIZE_STRING,
    ],
    '_posts_title' => [
        0 => FILTER_SANITIZE_STRING,
    ],
    '_order_by' => [
        0 => [
            'filter'  => FILTER_SANITIZE_STRING,
            'default' => 'date'
        ]
    ],
    '_asc' => [
        0 => [
            'filter'  => FILTER_SANITIZE_STRING,
            'default' => 'DESC'
        ]
    ],
    '_post_count' => [
        0 => [
            'filter'  => FILTER_VALIDATE_INT,
            'default' => get_option( 'posts_per_page' )
        ]  
    ]
];  
$meta = filter_var_array( $post_meta, $args );

但我得到以下结果var_export( $meta )

array (
  '_cat_id' => false,
  '_page_title' => NULL,
  '_posts_title' => NULL,
  '_order_by' => false,
  '_asc' => false,
  '_post_count' => false,
)

类似的东西_cat_id应该返回类似的东西

'_cat_id' => 
  array (
    0 => 21,
  ),

在结果数组中。

关于如何filter_var_array在多维数组上使用的任何想法

4

1 回答 1

2

您可以首先“取消嵌套”您的数组$post_meta ,方法是使用array_maparray_pop从每个子数组中弹出元素:

$post_meta_flat = array_map('array_pop', $post_meta);

这个数组$post_meta_flat看起来像这样:

array (
  '_edit_last' => '1',
  '_edit_lock' => '1451326767:1',
  '_sidebar' => 'Kies Sidebar',
  '_wp_page_template' => 'page-pop.php',
  'custom_sidebar_per_page' => 'default',
  '_cat_id' => '21',
  '_order_by' => 'date',
  '_asc' => 'DESC',
  '_post_count' => '5',
  '_days' => '0',
  '_custom_sidebar_per_page' => 'default',
)

现在这应该可以工作了:

$meta = filter_var_array( $post_meta_flat, $args );

您当然可以在单行中同时执行这两项操作:

$meta = filter_var_array( array_map('array_pop', $post_meta), $args );
于 2016-02-02T20:20:16.233 回答