2012-04-28 202 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