3

我有一个大数组(为方便起见而简化):

Array
(
    [last_name] => Ricardo 
    [first_name] => Montalban
    [sex] => Yes please
    [uploader_0_tmpname] => p171t8kao6qhj1132l14upe14rh1.jpg
    [uploader_0_name] => IMAG0114-1.jpg
    [uploader_0_status] => done
    [uploader_count] => 1
    [captcha_uid] => 155
)

并希望删除键以开头的所有键值对uploader_(这可以是一系列)以及每次出现的captcha_uid.

我在这里看到了一个有用的示例: 如果值与模式匹配,则删除键? 但我不擅长正则表达式。如何以最佳方式做到这一点?非常感谢您的意见。

4

4 回答 4

12

在这种简单的情况下,您不需要正则表达式。在另一个问题中应用已接受的答案

foreach( $array as $key => $value ) {
    if( strpos( $key, 'uploader_' ) === 0 ) {
        unset( $array[ $key ] );
    }
}

unset( $array[ 'captcha_uid' ] );
于 2012-07-12T10:02:15.873 回答
3

试试这个:

$data = array(
    'last_name' => 'Ricardo',
    'first_name' => 'Montalban',
    'sex' => 'Yes please',
    'uploader_0_tmpname' => 'p171t8kao6qhj1132l14upe14rh1.jpg',
    'uploader_0_name' => 'IMAG0114-1.jpg',
    'uploader_0_status' => 'done',
    'uploader_count' => '1',
    'captcha_uid' => '155',
);

foreach($data as $key => $value) {
    if(preg_match('/uploader_(.*)/s', $key)) {
        unset($data[$key]);
    }
}
unset($data['captcha_uid']);
print_r($data);
于 2012-07-12T10:02:13.080 回答
1

您可以使用foreach带有 PHP 函数的 a preg_match。类似的东西。

foreach($array as $key => $value) {
  if(!preg_match("#^uploader_#", $key)) {
    unset($array[$key]);  
  }
}
于 2012-07-12T10:03:50.040 回答
1

从 PHP 5.6.0 ( ARRAY_FILTER_USE_KEY) 开始,您也可以这样做:

$myarray = array_filter( $myarray, function ( $key ) {
    return 0 !== strpos( $key, 'uploader_' ) && 'captcha_uid' != $key;
} , ARRAY_FILTER_USE_KEY );

参考:array_filter

于 2016-01-31T10:08:02.540 回答