2012-04-28 198 views
2

假设我有包含以下的数组:使用通配符PHP搜索数组?

Array (
    [0] => 099/3274-6974 
    [1] => 099/12-365898 
    [2] => 001/323-9139 
    [3] => 002/3274-6974 
    [4] => 000/3623-8888 
    [5] => 001/323-9139 
    [6] => www.somesite.com 
) 

其中:

  • 值与000/, 002/ and 001/开始表示移动(蜂窝)电话号码,与099/开始
  • 值表示电话(固定)编号
  • www.开头的值表示网站

我需要将给定的数组转换为3个新数组,每个数组包含适当的信息,如arrayTelephone,arrayMobile,arraySite。

函数in_array只有当我知道给定数组中的键的整个值时才起作用,这不是我的情况。

回答

1

循环遍历所有项目,并根据前4个字符将它们排序到适当的数组中。

$arrayTelephone = array(); 
$arrayMobile = array(); 
$arraySite = array(); 

foreach($data as $item) { 
    switch(substr($item, 0, 4)) { 
     case '000/': 
     case '001/': 
     case '002/': 
      $arrayMobile[] = $item; 
      break; 
     case '099/': 
      $arrayTelephone[] = $item; 
      break; 
     case 'www.': 
      $arraySite[] = $item; 
      break; 
    } 
} 
+2

-1复制粘贴的代码,给这个家伙一个学习的机会 – 2012-04-28 23:22:03

+3

@MattiVirkkunen:带有描述的代码示例实际上非常适合学习。不过,我想你有权投票。 – Ryan 2012-04-28 23:23:10

+3

向代码示例投票?这太疯狂了。 – Josh 2012-04-29 00:04:08

2

创建三个空数组,循环访问源数组,使用foreach,检查每个值(regexp对此很好)并将这些项添加到它们各自的数组中。

+2

请不建议正则表达式这个解决方案,给家伙学习的机会。 – Ryan 2012-04-28 23:23:55

+1

如果使用regexp,['preg_grep()'](http://php.net/preg_grep)会更好。 – salathe 2012-04-28 23:29:49

1

您可以遍历数组并根据您的条件将值推送到正确的新数组。例如:

<?php 

$fixed_array = array(); 

foreach ($data_array as $data) { 
    if (strpos($data, '099') === 0) { 
     $fixed_array[] = $data; 
    } 

    if .... 
} 
0

是的,我实际上的preg_match但读了一些意见,我接受了更好的方式来显示后写的全部代码。

您将创建三个名为arrayTelephone,arrayMobile,arraySite的不同数组。

比你会搜索,虽然你的第一个数组与foreach或for循环。比较您的当前循环值与您的标准,并推后推继续您的循环与“继续”的声明后,推到值方便的新阵列(arrayTelephone,arrayMobile,arraySite)之一。

你可以找到通过查看添加Perfect PHP Guide