2016-02-02 7 views
0

У меня есть следующий массив из результата от var_export($post_meta); от $post_meta = get_post_meta(80);filter_input_array на многомерном массиве

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 на многомерный массив

+1

Может быть, это помогает? Похоже, что filter_var_array не работает рекурсивно. http://stackoverflow.com/questions/4829355/filter-var-array-multidimensional-array – eol

ответ

1

Вы могли бы первым «unnest» массиве $ post_meta, суя элемент из каждой подрешетки с использованием array_map и array_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); 

 Смежные вопросы

  • Нет связанных вопросов^_^