2013-12-15 137 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

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