2012-11-19 73 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); 

     } 

您可以使用此功能,这些功能返回数组元素删除指定的值之后。