2013-12-15 138 views
0

請看一下這個數組。處理`array_value_exists`函數的一個挑戰

$my_array = array('jan','feb','march','april');

在這裏,我想檢查字符串'arc'存在作爲我的陣列價值的一部分... (即使它是部分地存在爲字符串march中),我想該函數返回TRUE。我也會無視這個案子。所以'ARC'也應該返回TRUE。

我想過在這裏使用array_value_exists但它有兩個問題對我不利; 1)區分大小寫。 2)&它尋找完全匹配。

處理這種情況的最佳方法是什麼?

那麼,我應該設置一個foreach循環,然後去一個strpos檢查? 或者我應該將數組轉換爲序列化的形式,也許還部署reg_exp?

你會怎麼做?

有沒有人寫過這樣的功能?

P.S. 至於多維數組的情況下,這是確定它遍歷所有值..

回答

1

你可以嘗試像下面,它使用RecursiveArrayIteratorstripos

function array_subvalue_recursive($arr, $value) { 
    $itr = new RecursiveArrayIterator($arr); 
    foreach ($itr as $current) 
     if (is_string($current) && stripos($current, $value) !== false) 
      return $current; 
    return null; 
} 
array_subvalue_recursive($my_array, 'arc'); // returns "march" 

或者如果您不需要遞歸搜索陣列:

function array_subvalue_recursive($arr, $value) { 
    foreach ($arr as $current) 
     if (is_string($current) && stripos($current, $value) !== false) 
      return $current; 
    return null; 
} 
1

類似這工作(不區分大小寫以及)

preg_grep("/arc/i" , $my_array); 

$ my_array:

Array 
(
    [0] => jan 
    [1] => feb 
    [2] => march 
    [3] => april 
) 

結果:

Array 
(
[2] => march 
) 
1

在平板陣列,其中所有的值始終爲字符串,可以的情況下,使用像這樣的東西:

$newArray = array_filter($my_array, function($value) { return stripos($value, 'arc') !== false; }) 

$newArray將保存所有匹配的值,在本例中爲march

(只要有任何非字符串值的陣列中,stripos函數將觸發wanrings。)

+0

這是那些其中所有答案都是真棒情況之一。 –