2013-07-29 31 views
-2

如何在數組中找到如[number]的模式?如何在數組中找到像這樣的特定模式 - > [數字]?

我有類似這樣的數組:

$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]'); 

如何篩選的陣列和牽住那些具有像[若干]特定圖案字符串?

+1

寫你自己的解析函數,你可以使用'typeof','isArray' e.t.c.當你傳遞你自己的模式(如果你談論[數字],{對象},[字符串],[{對象}]) – FSou1

+0

你的意思是匹配字符串或確定值的類型?在你的問題中似乎有一些混淆的註釋。字符串應該適當引用。 –

+1

對不起,我編輯了我的問題 –

回答

3

可以與array_filter()陣列過濾,然後遍歷它:

$filtered_array = array_filter($array, function($el) { 
    return preg_match('/^\[\d+\]$/', $el); 
}); 

這是通過使用一個回調與preg_match()地發現,由左方括號[的條目,則有大量數字\d+,然後右方括號]

+0

'[]'現在是數組的快捷方式代碼 – DevZer0

+2

@ DevZer0 - 是的,我知道,但是{}不是任何東西的快捷方式,所以OP並不意味着使用'[] '創建一個嵌套數組(特別是因爲OP使用更詳細的'array()'語法開頭)。 – nickb

3

你可以嘗試is_array()

foreach ($array as $num) { 
    if(is_array($num)) { 
    echo $num . "<br />"; 
    } 
} 
+2

這是一個數組? [1] –

+0

@MohammadMasoudian - 不,它不是,尤其是因爲你更新了你的帖子,以表明你的數組中的每個元素都是一個字符串。 – nickb

0

只需使用preg_grep

$array = array(1, 2, 3, '{1}', '{2}', '{3}', '[1]', '[2]', '[3]'); 

$new_array = preg_grep('#^\[\d+(?:.\d+)?\]$#', $array); 
$new_array = array_values($new_array); // re-index the array 
print_r($new_array); // print the results 

解釋的正則表達式:

  • ^:開始串
  • \[:匹配[
  • \d+:匹配1位或多個
  • (?:.\d+)?:匹配任選的小數部分
  • \]:匹配]
  • $:字符串的結尾
+1

或['preg_filter()'](http:// php。淨/ preg過濾器),如果你不想包括括號。 – salathe

0

像這樣也許?該正則表達式匹配開頭[後跟一個數字,然後是結尾]

foreach ($array as $num) { 
    if (preg_match('#\[\d\]#', $num)) { 
     echo $num; 
    } 
} 
+0

如果'$ num'是'「[14]」或'「abc [8] def」'怎麼辦?這與第一個不匹配,會匹配第二個。 – nickb

+0

在問題中沒有指定字符串可能是什麼。我只是使用了給出的例子。 –

1

有幾種可能性,這裏有兩種可能性。

<?php 

$array = array(1, 2, 3, "{1}", "{2}", "{3}", "[1]", "[2]", "[3]"); 



// Method 1 
foreach ($array as $num) 
{ 
    if(preg_match("/\[\d+\]/", $num)){ 
     echo $num . "<br />"; 

    } 
} 
echo "<hr/>" 
// Method 2 
$filtered=preg_grep("/\[\d+\]/", $array); 
foreach ($filtered as $num) 
{ 
    echo $num . "<br />"; 
} 

?> 
相關問題