在每个数组元素上运行“strpos”

时间:2011-05-03 13:03:43

标签: php arrays

我需要查明数组值中是否存在字符串,但不一定是实际的数组值。

$array = array(
       0 => 'blue', 
       1 => 'red', 
       2 => 'green', 
       3 => 'red'
);

$key = xxxxxx('gr', $array); // $key = 2;

使用PHP

是否有内置方法可以做到这一点

10 个答案:

答案 0 :(得分:12)

您可以将preg_grep用于此目的

<?php
$array = array(
       0 => 'blue', 
       1 => 'red', 
       2 => 'green', 
       3 => 'red'
);

//$key = xxxxxx('gr', $array); // $key = 2;
$result=preg_grep("/^gr.*/", $array);
print_r($result);
?>

DEMO

答案 1 :(得分:2)

功能:array_filter就是你想要的。当指定的函数为它们返回true时,它只会保留结果数组中的项。

// return true if "gr"  found in $elem
// for this value
function isGr($key, $elem)
{
    if (strpos($elem, "gr") === FALSE)
    {
         return FALSE;
    }
    else
    {
         return TRUE;
    }
}

$grElems = array_filter($array, "isGr");
print_r($grElems);

结果:

array(
    2=>'green'
)

答案 2 :(得分:2)

您的xxxxxx将是array_map。但是,唉,你不能在这里使用strpos作为普通回调。要传递实际的搜索参数,您需要定义自定义或匿名函数 -

为了得到你想要的东西,你还需要更多的包装:

 $key = key(
          array_filter(
             array_map(
                function($s){return strpos($s, "gr");},
                $array
             ),
          "is_int")
        );

然而,这为您提供了搜索到的索引2

答案 3 :(得分:1)

没有内置函数,但由于preg_*函数支持数组作为参数,因此应该有效:

$keys = preg_filter('~gr~', '$0', $array);

答案 4 :(得分:1)


foreach怎么样?

function xxxxxx($str, $array) {
  foreach ($array as $key => $value) {
     if (strpos($value, $str) !== false) {
        return $key;
     }
  }
  return false;
}

答案 5 :(得分:0)

使用

  

带有strpos的array_walk

array_walk

答案 6 :(得分:0)

遍历数组并检查每个项目,然后返回索引。

function substr_in_array($array, $substr) {
    foreach ($array as $index => $item) {
        if (strrpos($item, $substr)!===FALSE && $item != $substr) {
            return $index;
        }
    }
}

这应该做你想要的。

答案 7 :(得分:0)

使用strpos检查每个数组元素的foreach。

<?php
$array = array(
       0 => 'blue', 
       1 => 'red', 
       2 => 'green', 
       3 => 'red'
);
$search='aaa';
function arraysearch($array,$search){
foreach ($array as $element){
if(strpos($element,$search)!==FALSE){
return TRUE;
}
}
return FALSE;
}
echo arraysearch($array,$search);
?>

答案 8 :(得分:0)

使用PHP 5.3,您可以使用array_filter和匿名函数在一个命令中执行此操作:

$keys = array_filter($array, function($var){ return strpos($var, 'gr') !== false; });

答案 9 :(得分:0)

通过使用PHP&gt; = 5.3.0,您可以使用anonymous functions作为callback来使用array_filter过滤该数组。

$array = array(
    0 => 'blue', 
    1 => 'red', 
    2 => 'green', 
    3 => 'red'
);

$search = 'gr';

$key = array_filter($array, function($element) use($search) {
    return strpos($element,$search) !== FALSE;
});

这是Shay Ben Moshe响应的改进版本。