filter_input_array 在多维数组上
filter_input_array on a multidimensional array
我从 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
应该return像
'_cat_id' =>
array (
0 => 21,
),
在结果数组中。
关于如何在多维数组上使用 filter_var_array
的任何想法
您可以先 "unnest" 您的数组 $post_meta,方法是使用 [=14= 从每个子数组中弹出元素]:
$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 );
我从 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
应该return像
'_cat_id' =>
array (
0 => 21,
),
在结果数组中。
关于如何在多维数组上使用 filter_var_array
的任何想法
您可以先 "unnest" 您的数组 $post_meta,方法是使用 [=14= 从每个子数组中弹出元素]:
$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 );