1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
/* ---------------------------------------
 *    正規表現のpreg_grepと配列関数の例
 *
 *  作成: 2015.07.23 yoshi of CXMedia Inc.
 * --------------------------------------- */
header("Content-type: text/plain; charset=UTF-8");

// 連想配列のテーブル
$input    = array(
        
'a'=>'apple',
        
'b'=>'banana',
        
'c'=>'cherry',
        
'd'=>'dorian'
);
// 正規表現パターン:[a]+
$pattern '/[a]+/';

echo 
"元の連想配列のテーブル\n";
print_r($input);

// 配列の添字「a」が1個以上あるものにマッチしない要素--array_keysの抽出
echo "配列の添字「a」が1個以上あるものにマッチしない要素--array_keysの抽出\n";
//PREG_GREP_INVERTを設定すると、正規表現パターンにマッチしない要素を返す
$out  pregGrepKeys($pattern,$input,PREG_GREP_INVERT);
print_r($out);

// 配列の値「a」が1個以上あるもの--array_valuesの抽出
echo "配列の値「a」が1個以上あるもの--array_valuesの抽出\n";
$out  pregGrepValues($pattern,$input);
print_r($out);

// --- array_keysの抽出するユーザー関数
function pregGrepKeys$pattern$input$flags ){
    
// -- preg_grepを使用して、正規表現パターンに一致するものを抽出
    // 注)$flags =PREG_GREP_INVERTのとき、一致しないものとなる
    
$keys preg_grep$patternarray_keys$input ), $flags );
    
$vals = array();
    foreach ( 
$keys as $key ){
        
$vals[$key] = $input[$key];
    }
    return 
$vals;
}

// --- array_valuesの抽出するユーザー関数
function pregGrepValues$pattern$input$flags ){
    
// -- preg_grepを使用して、正規表現パターンに一致する配列の値のものを抽出
    
$values preg_grep$patternarray_values$input ), $flags );
    
// キーと値を反転した配列を作成
    
$flip array_flip($input);
    
$vals = array();
    foreach ( 
$values as $value ){
        
$vals$flip[$value] ] = $value;
    }
    return 
$vals;
}
?>