2010-07-04 37 views
3

我試圖確定是否基於圖案的陣列中存在匹配,或者匹配使用array_key_exists,用的preg_match

陣列的一個示例:

Array 
(
    [author_id] => 1 
    [channel_id] => 1 
    [site_id] => 1 
    [entry_id] => 6 
    [url_title] => test_title_with_file2 
    [title] => Test Title with file 
    [field_id_1_directory] => 1 
    [field_id_4_directory] => 1 
    [submit] => Submit 
    [entry_date] => 1278219110 
) 

我想確定鍵或鍵存在,並且如果它們確實存在,則循環遍歷每個鍵並運行將使用'x'作爲變量的函數。

非常感謝,

Iain。

回答

11
foreach (array_keys($arr) as $k) { 
    if (preg_match('/^field_id_(\\d+)_directory$/', $k, $matches)) { 
     //do sth with $arr[$k] and $matches[1] 
    } 
} 
+0

謝謝你這麼多:) 我會在一兩分鐘,接受的答案時,我我被允許! – iain 2010-07-04 05:26:53

+0

有一個PHP函數專門用於匹配數組中的項目... preg_grep將是一個更好的選擇 – patrick 2016-07-20 15:28:42

1

一個更好的選擇應該是:

function preg_grep_keys($pattern, $input, $flags = 0) 
{ 
$keys = preg_grep($pattern, array_keys(\$input), \$flags); 
$vals = array(); 
foreach ($keys as $key) 
{ 
    $vals[$key] = $input[$key]; 
} 
return $vals; 
} 
1
$input = array (
    'hello'=>2, 
    'hello stackoverflow'=>1, 
    'hello world', 
    'foo bar bas'=>4 
); 
$matches = preg_grep ('/^hello$/i', array_keys($input)); 
echo $input[$matches[0]]; 

將返回2

+0

您的解決方案似乎比接受的答案更優雅。但它有一個小錯誤。 preg_grep保留array_keys返回的數組中的索引。所以,如果你搜索'hello world',你將不會有$匹配[0]。相反,你會有$匹配[2] – 2017-07-19 10:17:59