2013-06-19 65 views
4

搜索數組鍵說我有以下數組:通配符

$arr = array(
    "number2"=>"valid", 
    "number13"=>"valid" 
); 

,我需要找到,如果存在與number*存在的關鍵。

對於$arr,這是對的。對於以下陣列:

$arr2 = array(
    "key"=>"foo", 
    "key2"=>"foo2" 
); 

這將返回false。

+0

很多的方式來處理它 - 一個普通的老'的foreach()'循環追加到輸出數組,或者如果你想要變得聰明,'array_filter()'加'array_flip()'。 –

+0

您可以使用'array_key_exists'來檢查特定的數組密鑰,但是沒有可用的通配符版本。您可以使用循環來檢查多個值。 –

+2

或['array_keys()'](http://php.net/array_keys)上的''preg_grep()'](http://php.net/preg_grep)。 – mario

回答

5

這個假設數字需要跟一個實際的數字(編輯:或者根本沒有),根據需要調整正則表達式。例如,任何以「數字」開頭的內容,都可以使用/^number/

if(count(preg_grep('/^number[\d]*/', array_keys($arr))) > 0) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
2

使用正則表達式。

foreach ($arr as $key => $value) { 
    // NOTE: check for the right format of the regular expression 
    if (preg_match("/^number([0-9]*)$", $key)) { 
    echo "A match was found."; 
    } else { 
    echo "A match was not found."; 
    } 
} 
+1

這會起作用,但像@mario建議的那樣,'array_keys'上的'preg_grep'更簡單,更「程序化」。 PHP有很多很多有用的數組函數來保存輸入。 – sgroves

+0

這對我來說非常有用。我有一個電子郵件收件人和電臺選項表,其中第1列是發件人(只允許一個),第2列第3列中的人員具有「收件人」,「抄送」和「不適用」的廣播選項。值所選內容是在$ _POST中攜帶的。在下一頁,我需要通過$ _POST進行解析,然後查找以「收音機」開頭的密鑰,以使該人成爲發件人,「收件人」收件人,「CC」收件人或根本不發送郵件( 「NA」)。 – user208145

0

下面是一個簡單的函數,它會做你想要什麼:

function preg_grep_key($pattern, $input) { 
    return preg_grep($pattern, array_keys($input)); 
} 

// ----- Usage ----- 

$arr = array(
    "number2"=>"valid", 
    "number13"=>"valid" 
); 


if (count(preg_grep_key('/^number/', $arr)) === 0) { 
    // Nope 
} else { 
    // Yep 
}