2012-11-19 72 views
2

刪除我經常使用preg_match_all($pattern, $string, $matches)上的數據,基本上,我總是需要刪除或者£0.00或$ 0.00或€0.00從陣列中它應該是在裏面。從陣列PHP

我從來不知道數組中的位置,這將是中,如果在所有。

我試過unset($matches['£0.00'])unset($matches[0]['£0.00'])但沒有奏效

而且,能不能做到不使用實際的貨幣符號,也許正則表達式\p{Sc}

所以,綜上所述,我有一個數字數組與貨幣符號,並需要刪除任何零條目。

樣品陣列:

Array ([0] => Array ([0] => £18.99 [1] => £0.00 [2] => £0.00 [3] => £0.00)) 

這可能嗎?

+0

您可以向我們展示樣品陣列結構? –

+0

@MuthuKumaran - 喜,增加樣本 –

+0

你爲什麼不修改'$ pattern'不匹配擺在首位? – lanzz

回答

6

preg_match()preg_match_all()的使用有時會奇怪

$matches將是比賽的模式的陣列 - 在這種情況下,如果你

preg_match("/\p{Sc}0\.00/","£0.00",$matches); 
//$matches[0] => £0.00 

,或者如果你加括號()的模式你可以提取一部分

preg_match("/\p{Sc}(0\.00)/","£0.00",$matches); 
//$matches[0] => £0.00 
//$matches[1] => 0.00 

所以要解決這個問題試試這個

foreach($sample_array as $key => $value) 
{ 
    if(preg_match("/(\$|\p{Sc})0\.00/",$value)) 
    { 
      unset($sample_array[$key]); 
    } 
} 

通知管道|即表示$£ - 如果添加另一個管的歐元符號,將捕捉以及 - 也注意到我們是unset() -ing原始數組中的一個關鍵,而不是unset() -ing的$matches陣列

+0

謝謝你,是否有可能我可以改變我的原始模式,停止它的源代碼,而不是再次運行preg_match?當前模式:$ pattern ='/\p{Sc}\s*\d{1,3}(?:,\d{3})*(?:\.\d+)?/u'; –

+0

可能 - 它看起來像你所得到的數字出2個獨立的括號 - 做一個'的var_dump($匹配)'或'的print_r($匹配)檢查'$ matches'值' –

0
function remove_element($arr, $val) 

     { 

      foreach ($arr as $key => $value) 

      { 

       if ($arr[$key] == $val) 

       { 

       unset($arr[$key]); 

       } 

      } 

      return $arr = array_values($arr); 

     } 

您可以使用此功能,這些功能返回數組元素刪除指定的值之後。