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

foreachPHP 関数でa を使用できますpreg_match。そんな感じ。

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